9

在 MVC4 应用程序中,在控制器逻辑中,我想检查用户是否已登录。
我应该使用:

User.Identity.IsAuthenticated

或者:

WebSecurity.IsAuthenticated

据我所知WebSecurity只是一个包装。我应该使用它还是User.Identity具有不同的功能?

4

1 回答 1

7

据我所知,WebSecurity 只是一个包装器。

没错,两者都是一样的。让我们看看WebSecurity.IsAuthenticated属性是如何实现的:

public static bool IsAuthenticated
{
    get
    {
        return Request.IsAuthenticated;
    }
}

现在让我们看看WebSecurity.Request静态属性是如何实现的:

internal static HttpRequestBase Request
{
    get
    {
        return Context.Request;
    }
}

最后让我们看看WebSecurity.Context静态属性是如何实现的:

internal static HttpContextBase Context
{
    get
    {
        return new HttpContextWrapper(HttpContext.Current);
    }
}

如您所见:

WebSecurity.IsAuthenticated

是相同的:

new HttpContextWrapper(HttpContext.Current).Request.IsAuthenticated

反过来,这Context.User.Identity.IsAuthenticated与存在 null 检查的细微差别相同,并且如果例如Identity属性为 null,则该属性将返回 false。

我应该使用它还是 User.Identity 具有不同的功能?

即使两者严格等价,我也会使用User.Identity官方的 ASP.NET 实现,因为如果明天您决定用其他东西替换简单的成员资格提供程序,那么您的代码中要替换的东西就会少得多。

于 2013-04-06T16:30:37.050 回答