2012-09-21 21 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(); 
    } 
}