2010-07-16 61 views
0

運行之前,我在Global.asax文件此認證檢查中的Session_OnStart()調用:呼叫會話的任何控制器操作在MVC

if (Session["Authenticated"] == null) 
     { 
      Response.Redirect("~/Login.aspx"); 
     } 

這種會話驗證的緊密結合我們所有的網絡應用程序,所以我必須這樣使用它。這個global.asax位於我的MVC項目所在的舊Webforms項目中。因此,我相信它允許我直接訪問我的控制器操作,例如http://localhost/controller/action,而不會填充我的會話身份驗證,即不會重定向。我已經將這些代碼添加到每個控制器動作來解決這個問題,但是有沒有辦法將它設置在全局的某個地方(而不是global.asax),這樣我只需要爲所有控制器動作調用一次呢?謝謝。

回答

6

您應該創建一個所有控制器都從中繼承的基本控制器。那麼你只需在一個地方擁有邏輯。即:

public abstract class BaseController : ControllerBase 

然後,你可以使用新的BaseContoller中的initialize方法來完成公共邏輯。即

- 改爲OnActionExecuting,而不是初始化。這並不是最優雅的地方,因爲我們處在被稱爲視圖的風口浪尖上。不過,這是一個起點。

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    // you should be able to get session stuff here!! 
    base.OnActionExecuting(filterContext); 
} 

,並在每個控制器:

public class AnotherNormalController : BaseController 
+0

問題是會議是在該點:(空的,只有當我的控制器動作被稱爲我似乎能夠訪問Session對象,但在控制器級別,其始終爲空? – David 2010-07-16 12:37:57

+0

大衛, 請參閱上面的更新使用OnActionExcecuting,而不是初始化 – 2010-07-16 13:30:49

+0

謝謝我會試試這個.. – David 2010-07-16 13:51:45