对于ASP.NET 5 beta 6,在创建控制器时,您似乎不再扩展Controller(Microsoft.AspNet.Mvc.Controller)。那么我如何才能访问当前用户?以前我只是使用" User" property off Controller获取与执行操作关联的用户的System.Security.Claims.ClaimsPrincipal。没有控制器,现在"用户"不再定义。
适用于Beta 5:
2
java.lang.NullPointerException
at src.service.Test.getMail(Test.java:73)
at src.service.Test.main(Test.java:107)
Exception in thread "main" java.lang.NullPointerException
at src.service.Test.main(Test.java:111)
在Beta 6中不起作用:
[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);
}
}
答案 0 :(得分:2)
所以我花了比我今晚想要的更长的时间来考虑如何使用新的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);
}
}
答案 1 :(得分:1)
在测试版6中,Controller
基类不再包含Microsoft.AspNet.Mvc.Core
包,而是包含Microsoft.AspNet.Mvc.ViewFeatures
包。
因此,添加对Microsoft.AspNet.Mvc.ViewFeatures
的引用将解决您的问题。 Controller
类仍然位于Microsoft.AspNet.Mvc
命名空间中。
另见此公告:Refactoring of MVC packages。