无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Web.Mvc.ActionResult”

问题描述 投票:0回答:3

我正在尝试 ASP.NET MVC5 Identity 并尝试实现基于声明的身份验证。

我收到以下错误:

无法将类型“System.Collections.Generic.IEnumerable<>”隐式转换为“System.Web.Mvc.ActionResult”。存在显式转换(您是否缺少转换?)

这是一段代码:

public ActionResult GetClaims()
{
    var identity = User.Identity as ClaimsIdentity;
    var claims = from c in identity.Claims
                 select new
                 {
                     subject = c.Subject.Name,
                     type = c.Type,
                     value = c.Value
                 };
    return claims;
}

我正在遵循 http://bitoftech.net/2015/03/31/asp-net-web-api-claims-authorization-with-asp-net-identity-2-1/

的示例
asp.net-mvc asp.net-identity claims-based-identity
3个回答
9
投票

如果它在 MVC 控制器中,您应该返回一个视图,该视图接受

IEnumerable<Claim>
作为模型:

public ActionResult GetClaims()
{
    var identity = User.Identity as ClaimsIdentity;
    var claims = from c in identity.Claims
                 select new
                 {
                     subject = c.Subject.Name,
                     type = c.Type,
                     value = c.Value
                 };
    return View(claims);
}

如果它在 api 控制器中,你可以返回

IHttpActionResult

public IHttpActionResult GetClaims()
{
    var identity = User.Identity as ClaimsIdentity;
    var claims = from c in identity.Claims
                 select new
                 {
                     subject = c.Subject.Name,
                     type = c.Type,
                     value = c.Value
                 };
    return Ok(claims);
}

1
投票

有几件事。您尝试以

ActionResult
的形式返回可枚举的匿名类型。通常,ActionResults 希望您返回对传入模型的视图(剃刀模板)的引用:

return View(model);

如果你只想返回数据,那么你需要返回一个

JsonResult

return Json(new { Data = model }, JsonRequestBehavior.AllowGet);

0
投票

尝试以下代码:IAction 或 ActionResult 应该具有 HTTPResponse 返回类型。 [1]:https://i.sstatic.net/oT0y4r9A.png

© www.soinside.com 2019 - 2024. All rights reserved.