测试请求是匿名的还是经过身份验证的 WebAPI 2 + 身份
Testing if a request is anonymous or authenticated WebAPI 2 + Identity
我正在使用 WebAPI 2 + ASP.NET 身份
在我的 ApiController 方法之一中,我想测试特定 HTTP 请求是否来自经过身份验证的客户端(即请求是否包含授权 header)。
下面的方法可行,但也许有更好的方法?
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 种不同的方法(用适当的数据注释装饰)。
在 WebApi 的 ApiController
class 中有一个 User
属性 (您已经在代码中使用了它:User.Identity.GetUserName()
) .
这个 User
属性 是一个 IPrincipal
实例,它有一个 属性 Identity
是 IIdentity
的实例。
在 ApiController
方法的代码中,您可以通过测试 User.Identity
的 IsAuthenticated
属性 来测试当前请求的用户是否已通过身份验证。
例如:
if ( User.Identity.IsAuthenticated)
{
// Authenticated user...do something
}
else
{
// anonymous..do something different
}
我正在使用 WebAPI 2 + ASP.NET 身份
在我的 ApiController 方法之一中,我想测试特定 HTTP 请求是否来自经过身份验证的客户端(即请求是否包含授权 header)。
下面的方法可行,但也许有更好的方法?
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 种不同的方法(用适当的数据注释装饰)。
在 WebApi 的 ApiController
class 中有一个 User
属性 (您已经在代码中使用了它:User.Identity.GetUserName()
) .
这个 User
属性 是一个 IPrincipal
实例,它有一个 属性 Identity
是 IIdentity
的实例。
在 ApiController
方法的代码中,您可以通过测试 User.Identity
的 IsAuthenticated
属性 来测试当前请求的用户是否已通过身份验证。
例如:
if ( User.Identity.IsAuthenticated)
{
// Authenticated user...do something
}
else
{
// anonymous..do something different
}