在 ASP.NET 5 beta 6 控制器中获取当前用户
Get current user in ASP.NET 5 beta 6 controller
对于 ASP.NET 5 beta 6,创建控制器时似乎不再扩展控制器 (Microsoft.AspNet.Mvc.Controller)。那么我如何才能访问当前用户呢?以前我只是使用 "User" 属性 off Controller 来获取与执行操作关联的用户的 System.Security.Claims.ClaimsPrincipal。没有控制器,现在 "User" 不再定义。
在 Beta 5 中有效:
[Authorize]
[Route("[controller]")]
public class UserDetailsController : Controller
{
[HttpGet]
public JsonResult Get()
{
var user = User as ClaimsPrincipal;
var claims = from c in user.Claims
select new
{
type = c.Type,
value = c.Value
};
return new JsonResult(claims);
}
}
在 Beta 6 中不起作用:
[Authorize]
[Route("[controller]")]
public class UserDetailsController
{
[HttpGet]
public JsonResult Get()
{
var user = User as ClaimsPrincipal; // ERROR - The name 'User' does not exist in the current context
var claims = from c in user.Claims
select new
{
type = c.Type,
value = c.Value
};
return new JsonResult(claims);
}
}
所以我今晚花了比我想承认的更长的时间来寻找如何使用新的 POCO 样式控制器访问当前用户的答案,当然在我发布问题后不久我偶然发现了答案通读 ASP.NET 的 announcements repo。希望这可以帮助其他人。
POCO 风格的控制器应该是:
[Authorize]
[Route("[controller]")]
public class UserDetailsController
{
[ActionContext]
public ActionContext ActionContext { get; set; }
public HttpContext HttpContext => ActionContext.HttpContext;
[HttpGet]
public JsonResult Get()
{
var user = HttpContext.User;
var claims = from c in user.Claims
select new
{
type = c.Type,
value = c.Value
};
return new JsonResult(claims);
}
}
在 beta6 中,Controller
基础 class 不再与 Microsoft.AspNet.Mvc.Core
包一起提供,而是与 Microsoft.AspNet.Mvc.ViewFeatures
包一起提供。
因此添加对 Microsoft.AspNet.Mvc.ViewFeatures
的引用将解决您的问题。 Controller
class 仍然存在于 Microsoft.AspNet.Mvc
命名空间中。
另请参阅此公告:Refactoring of MVC packages。
对于 ASP.NET 5 beta 6,创建控制器时似乎不再扩展控制器 (Microsoft.AspNet.Mvc.Controller)。那么我如何才能访问当前用户呢?以前我只是使用 "User" 属性 off Controller 来获取与执行操作关联的用户的 System.Security.Claims.ClaimsPrincipal。没有控制器,现在 "User" 不再定义。
在 Beta 5 中有效:
[Authorize]
[Route("[controller]")]
public class UserDetailsController : Controller
{
[HttpGet]
public JsonResult Get()
{
var user = User as ClaimsPrincipal;
var claims = from c in user.Claims
select new
{
type = c.Type,
value = c.Value
};
return new JsonResult(claims);
}
}
在 Beta 6 中不起作用:
[Authorize]
[Route("[controller]")]
public class UserDetailsController
{
[HttpGet]
public JsonResult Get()
{
var user = User as ClaimsPrincipal; // ERROR - The name 'User' does not exist in the current context
var claims = from c in user.Claims
select new
{
type = c.Type,
value = c.Value
};
return new JsonResult(claims);
}
}
所以我今晚花了比我想承认的更长的时间来寻找如何使用新的 POCO 样式控制器访问当前用户的答案,当然在我发布问题后不久我偶然发现了答案通读 ASP.NET 的 announcements repo。希望这可以帮助其他人。
POCO 风格的控制器应该是:
[Authorize]
[Route("[controller]")]
public class UserDetailsController
{
[ActionContext]
public ActionContext ActionContext { get; set; }
public HttpContext HttpContext => ActionContext.HttpContext;
[HttpGet]
public JsonResult Get()
{
var user = HttpContext.User;
var claims = from c in user.Claims
select new
{
type = c.Type,
value = c.Value
};
return new JsonResult(claims);
}
}
在 beta6 中,Controller
基础 class 不再与 Microsoft.AspNet.Mvc.Core
包一起提供,而是与 Microsoft.AspNet.Mvc.ViewFeatures
包一起提供。
因此添加对 Microsoft.AspNet.Mvc.ViewFeatures
的引用将解决您的问题。 Controller
class 仍然存在于 Microsoft.AspNet.Mvc
命名空间中。
另请参阅此公告:Refactoring of MVC packages。