2012-02-25 18 views
0

如果用戶通過身份驗證,我正在通過$.post函數進行檢查。如果不是,我想將他重定向到登錄頁面,並將當前的URL放入?RedirectUrl=參數中(與FormsAuthentication.RedirectToLoginPage()一樣)。熱做到這一點?通過JQuery或一些.net方法?MVC 3如何手動創建重定向網址?

回答

1

您可以創建自定義AuthorizeUser屬性並重寫HandleUnauthorizeUser(..)。

然後,您可以驗證請求是否是ajax請求,然後返回具有適當值的jsonresult,這可以通過javascript在視圖中讀取。

嘗試下面的代碼。(我還沒有測試)

public class CustomAuthorizeUserAttribute:AuthorizeAttribute 
{ 
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if (filterContext.HttpContext.Request.IsAjaxRequest()) 
     { 
      var result = new JsonResult(); 
      result.Data = new 
      { 
       responseCode = 401, 
       loginUrl = FormsAuthentication.LoginUrl 
      }; 
      filterContext.Result = result; 
     } 
     else 
     { 
      base.HandleUnauthorizedRequest(filterContext); 
     } 
    } 
} 

在控制器動作用它代替[授權]屬性的。

+0

+1優雅的解決方案。但是,也許401是更合適的響應代碼。 – HackedByChinese 2012-02-25 16:47:54

+0

是的,401用於未授權訪問。我會編輯它。 – Manas 2012-02-25 16:48:37

1

,如果他不是你可以返回RedirectResult,如果不爲你工作,我建議你在服務器端生成的重定向URL,並通過JSON

它傳遞給jQuery的