2012-11-09 63 views
0

我只需要做出MVC3的手動autentication而問題是,當用戶訪問從項目的URL,我已經在基類的代碼:MVC3手冊認證

public class BaseController : Controller 
{ 
    private Usuario loggedUser; 
    protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
    { 
     if (requestContext.HttpContext.Request.RawUrl != "/Home/Login") 
     { 
      if (requestContext.HttpContext.Session["usuario"] != null) 
      { 
       loggedUser = (Usuario)requestContext.HttpContext.Session["usuario"]; 
       ViewBag.nomeUsuario = loggedUser.Nome; 
       ViewBag.idUsuario = loggedUser.Id; 
      } 
      else 
      { 
       requestContext.HttpContext.Response.RedirectPermanent("~/Home/Login"); 
      } 
     } 
     base.Initialize(requestContext); 
    } 

的問題是,當他們沒有授權我發送重定向但初始化繼續處理請求操作。我認爲驗證是不是一個好地方,因爲我可以刪除inicalize方法。

+3

考慮使用自定義'FilterAttribute',如'AuthorizeAttribute',但創建自己的並將其放在'BaseController'或任何需要控制器的功能上。 –

+0

馬里奧,我看着AuthorizeAttribute,但我需要創建沒有微軟成員資格,沒有使用MS的身份驗證功能。 –

+0

您可以繼承'AuthorizeAttribute'並覆蓋使用您自己邏輯的功能。 –

回答

0

在這種情況下重定向不起作用。嘗試覆蓋OnAuthorization並返回一個RedirectResult。

更好的是將這個邏輯作爲一個屬性來實現。

public class MyAuthorize : AuthorizeAttribute 
{ 
    private Usuario loggedUser; 
    protected override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (filterContext.HttpContext.Request.RawUrl != "/Home/Login") 
     { 
      if (filterContext.HttpContext.Session["usuario"] != null) 
      { 
       loggedUser = (Usuario) filterContext.HttpContext.Session["usuario"]; 
       ViewBag.nomeUsuario = loggedUser.Nome; 
       ViewBag.idUsuario = loggedUser.Id; 
      } 
      else 
      { 
       filterContext.Result = new RedirectResult("~/Home/Login"); 
      } 
      base.OnAuthorization(filterContext); 
     } 
    } 
} 
+0

太棒了!非常感謝,但mvc3 no的順序是...... - 執行 - 初始化 - ExecuteCore –