我使用的是WebAPI 2 + ASP.NET身份
在我的一个ApiController方法中,我想测试特定的HTTP请求是否来自经过身份验证的客户端(即请求是否包含授权标头)。
以下作品,但也许有更好的方法?
private AuthContext db = new AuthContext();
// GET api/Orders/
[AllowAnonymous]
public async Task<IHttpActionResult> GetOrder(int id)
{
// ApplicationUser is an IdentityUser.
ApplicationUser currentUser = null;
try
{
UserManager<ApplicationUser> userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db));
currentUser = await userManager.FindByNameAsync(User.Identity.GetUserName());
}
catch (Exception)
{
}
if ( currentUser == null )
{
// Anonymous request.
// etc...
} else {
// Authorized request.
// etc...
}
}
我正在使用默认路由模板。另一种选择是为授权请求和匿名请求(用适当的数据注释装饰)路由到2种不同的方法。
答案 0 :(得分:5)
在WebApi的ApiController
课程中,有User
属性(您已在代码中使用该属性:User.Identity.GetUserName()
)。
此User
属性是IPrincipal
个实例,其属性Identity
是IIdentity
的实例。
在ApiController
方法的代码中,您可以通过测试IsAuthenticated
的{{1}}属性来测试当前请求的用户是否经过身份验证。
例如:
User.Identity