User.Identity.IsAuthenticated vs WebSecurity.IsAuthenticated

Yar*_*evi 9 c# authentication forms-authentication asp.net-mvc-4

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

User.Identity.IsAuthenticated
Run Code Online (Sandbox Code Playgroud)

要么:

WebSecurity.IsAuthenticated
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*rov 7

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

这是正确的,两者都是一样的.我们来看看该WebSecurity.IsAuthenticated属性的实现方式:

public static bool IsAuthenticated
{
    get
    {
        return Request.IsAuthenticated;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在让我们看一下如何WebSecurity.Request实现static属性:

internal static HttpRequestBase Request
{
    get
    {
        return Context.Request;
    }
}
Run Code Online (Sandbox Code Playgroud)

最后让我们看一下WebSecurity.Context静态属性的实现方式:

internal static HttpContextBase Context
{
    get
    {
        return new HttpContextWrapper(HttpContext.Current);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以你可以看到:

WebSecurity.IsAuthenticated
Run Code Online (Sandbox Code Playgroud)

是相同的:

new HttpContextWrapper(HttpContext.Current).Request.IsAuthenticated
Run Code Online (Sandbox Code Playgroud)

反过来又Context.User.Identity.IsAuthenticated与存在空检查略有不同,如果Identity属性为null ,则属性将返回false .

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

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

  • 是的,两者也是一样的.您可以使用您喜欢的具有相同结果的那个. (2认同)