获取ASP.NET 5 beta 6控制器中的当前用户
对于ASP.NET 5 beta 6,在创建控制器时,似乎不再扩展控制器(Microsoft.AspNet.Mvc.controller)。那么我如何访问当前用户呢?之前,我只是使用控制器外的“User”属性来获取与执行操作关联的用户的System.Security.Claims.ClaimsPrincipal。没有控制器,现在不再定义“用户” 在Beta 5中工作:获取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
[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代码>为方便起见。