2012-09-21 20 views
1

大家好我有两次登录,但是如何使用授权分配这些登录URL?如何在MVC3中授权不同的登录URL?

这里是我的webconfig:

<location path="Home"> 
    <system.web> 
     <authorization> 
     <deny users="?"/> 
     </authorization> 
    </system.web> 
    </location> 


<authentication mode="Forms"> 
     <forms loginUrl="~/Home/Login" timeout="2880" /> 
    </authentication> 

那么如何才能创建第二loginurl?

回答

6

表单身份验证中不能有2个登录URL。如果您需要实现此功能,则可以编写自定义[Authorize]属性,然后覆盖HandleUnauthorizedRequest方法,您可以将其重定向到相应的登录URL。

例如:

public class MyAuthorizeAttribute : AuthorizeAttribute 
{ 
    private readonly string _controller; 
    private readonly string _action; 
    public MyAuthorizeAttribute(): this("account", "logon") 
    { 
    } 

    public MyAuthorizeAttribute(string controller, string action) 
    { 
     _controller = controller; 
     _action = action; 
    } 

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     var values = new RouteValueDictionary(new 
     { 
      controller = _controller, 
      action = _action, 
      returnurl = filterContext.HttpContext.Request.Url.PathAndQuery 
     }); 
     filterContext.Result = new RedirectToRouteResult(values); 
    } 
} 

然后:

public class SomeController 
{ 
    [MyAuthorize] 
    public ActionResult Foo() 
    { 
     return View(); 
    } 

    [MyAuthorize("account", "someotherlogonaction")] 
    public ActionResult Bar() 
    { 
     return View(); 
    } 
}