Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取ASP.NET 5 beta 6控制器中的当前用户_Asp.net_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

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

获取ASP.NET 5 beta 6控制器中的当前用户,asp.net,asp.net-core,asp.net-core-mvc,Asp.net,Asp.net Core,Asp.net Core Mvc,对于ASP.NET 5 beta 6,在创建控制器时,似乎不再扩展控制器(Microsoft.AspNet.Mvc.controller)。那么我如何访问当前用户呢?之前,我只是使用控制器外的“User”属性来获取与执行操作关联的用户的System.Security.Claims.ClaimsPrincipal。没有控制器,现在不再定义“用户” 在Beta 5中工作: [Authorize] [Route("[controller]")] public class UserDetailsCont

对于ASP.NET 5 beta 6,在创建控制器时,似乎不再扩展控制器(Microsoft.AspNet.Mvc.controller)。那么我如何访问当前用户呢?之前,我只是使用控制器外的“User”属性来获取与执行操作关联的用户的System.Security.Claims.ClaimsPrincipal。没有控制器,现在不再定义“用户”

在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时偶然发现了答案。希望这能帮助其他人

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中,基类不再附带
Microsoft.AspNet.Mvc.Core
包,而是附带
Microsoft.AspNet.Mvc.ViewFeatures

因此,添加对的引用将解决您的问题。
Controller
类仍然存在于
Microsoft.AspNet.Mvc
命名空间中


另请参见此公告:.

您甚至可以添加
公共索赔sprincipal User=>HttpContext?.User为方便起见。