Bud*_*Joe 27 c# asp.net asp.net-mvc asp.net-mvc-4
我有一个内置的网络应用程序ASP.NET 4.我们很难使用其他团队构建的身份验证API.如果该站点的用户已成功通过该站点的身份验证,我希望他们可以访问整个站点.
在ASP.NETWebForm时代,我只是习惯在会话中保留自定义User对象.如果该对象为null,我知道用户未经过身份验证.是否有相似但改进的方法MVC.如果可能的话,我不想构建自己的ASP.NET Membership模型提供程序.这样做最简单的方法是什么?
Jat*_*til 45
您可以按照以下方式Forms Authentication使用Authorizeattibute,
要限制对视图的访问:
将AuthorizeAttribute属性添加到操作方法声明中,如下所示,
[Authorize]
public ActionResult Index()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
在web.config中配置表单身份验证
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
Run Code Online (Sandbox Code Playgroud)
登录发布操作:如果用户有效,则设置身份验证cookie
[HttpPost]
public ActionResult Login(User model, string returnUrl)
{
//Validation code
if (userValid)
{
FormsAuthentication.SetAuthCookie(username, false);
}
}
Run Code Online (Sandbox Code Playgroud)
注销动作:
public ActionResult LogOff()
{
FormsAuthentication.SignOut();
return RedirectToAction("Index", "Home");
}
Run Code Online (Sandbox Code Playgroud)
您可能希望拥有自定义授权过滤器.这是一个例子:MVC中的自定义过滤器.然后,您可以在应用启动(使用RegisterGlobalFilters)上全局应用此过滤器.
public class LegacyAuthorize : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (HttpContext.Current.Session["User"] == null)
base.HandleUnauthorizedRequest(actionContext);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在你的global.asax你有这样的事情:
GlobalFilters.Filters.Add(new LegacyAuthorize());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46243 次 |
| 最近记录: |