我们如何在安全的ApiController动作中获取当前用户,而不将userName或userId作为参数传递?
我们认为这是可用的,因为我们处于安全的行动之内。采取安全措施意味着用户已经通过身份验证,并且该请求具有其承载令牌。假定WebApi已授权用户,则可能有一种内置的方式来访问userId,而不必将其作为操作参数传递。
我们如何在安全的ApiController动作中获取当前用户,而不将userName或userId作为参数传递?
我们认为这是可用的,因为我们处于安全的行动之内。采取安全措施意味着用户已经通过身份验证,并且该请求具有其承载令牌。假定WebApi已授权用户,则可能有一种内置的方式来访问userId,而不必将其作为操作参数传递。
Answers:
在WebApi 2中,您可以在ApiController RequestContext.Principal
的方法中使用
using Microsoft.AspNet.Identity;
您还可以使用以下User
属性访问主体ApiController
。
因此以下两个语句基本相同:
string id;
id = User.Identity.GetUserId();
id = RequestContext.Principal.Identity.GetUserId();
提示在于Webapi2自动生成的帐户控制器
将此属性与getter定义为
public string UserIdentity
{
get
{
var user = UserManager.FindByName(User.Identity.Name);
return user;//user.Email
}
}
并为了获得UserManager-在WebApi2中-做为罗马人(读作AccountController)
public ApplicationUserManager UserManager
{
get { return HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>(); }
}
这应该在IIS和自托管模式下兼容
在.Net Core中,用于User.Identity.Name
获取用户的Name声明。
User.Identity.Name
获取名称声明的值。它不是特定于Active Directory的。
如果您使用的是Asp.Identity UseManager,它将自动设置
RequestContext.Principal.Identity.GetUserId()
根据IdentityUser您在创建使用IdentityDbContext。
如果您要实现自定义用户表和owin令牌承载身份验证,请检查我的答案。
希望它仍然有帮助。:)
string userName;
string userId;
if (HttpContext.Current != null && HttpContext.Current.User != null
&& HttpContext.Current.User.Identity.Name != null)
{
userName = HttpContext.Current.User.Identity.Name;
userId = HttpContext.Current.User.Identity.GetUserId();
}
或者基于Darrel Miller的评论,也许可以使用它首先检索HttpContext。
// get httpContext
object httpContext;
actionContext.Request.Properties.TryGetValue("MS_HttpContext", out httpContext);
也可以看看: