测试请求是匿名的还是经过身份验证的WebAPI 2 + Identity

时间:2015-08-19 17:57:51

标签: asp.net-identity asp.net-web-api2 asp.net-web-api asp.net-web-api-routing

我使用的是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种不同的方法。

1 个答案:

答案 0 :(得分:5)

在WebApi的ApiController课程中,有User属性(您已在代码中使用该属性:User.Identity.GetUserName())。

User属性是IPrincipal个实例,其属性IdentityIIdentity的实例。

ApiController方法的代码中,您可以通过测试IsAuthenticated的{​​{1}}属性来测试当前请求的用户是否经过身份验证。

例如:

User.Identity