在MVC4应用程序中,在控制器逻辑中,我想检查用户是否已登录 我应该使用:
User.Identity.IsAuthenticated
或者:
WebSecurity.IsAuthenticated
据我所知WebSecurity
只是一个包装器。我应该使用它还是User.Identity
具有不同的功能?
答案 0 :(得分: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
相同,只是存在空检查,如果Identity
属性为null,则属性将返回false。
我应该使用它还是User.Identity具有不同的功能?
即使两者严格等同,我也会使用User.Identity
这是官方的ASP.NET实现,因为如果明天你决定用其他东西替换简单的成员资格提供者,你将会有更少的东西需要替换。你的代码。