获取ASP.NET 5 beta 6控制器中的当前用户

时间:2015-07-30 05:06:07

标签: asp.net asp.net-core asp.net-core-mvc

对于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);
    }
}

2 个答案:

答案 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