2012-09-01 49 views
2

我有一些我希望在url中普遍注意的變量。如果他們在url中設置,我想設置一個cookie來存儲這些信息。如果在任何操作中存在變量,則設置cookie

例如...

http://www.website.com/?SomeVariable=something

http://www.website.com/SomeController/SomeAction?SomeVariable=something

在這兩種情況下,我想SomeVariable進行迴應(我想這對任何控制器/行動整個網站

我有它的cookie的一部分工作和func在主頁上,但我想放棄人們現在除了主頁上的一些網址,並希望不必在這種變化時重做邏輯。

可以這樣做嗎?我應該在哪裏放置代碼?

回答

2

好的,我最終根據Matt Tew和user850010的信息搞清楚我需要做什麼。

自定義操作過濾器:

public class CheckForAd : ActionFilterAttribute { 
    public override void OnActionExecuted(ActionExecutedContext filterContext) { 
     var data = filterContext.HttpContext.Request.QueryString["AdName"]; 

     if(data != null) { 
      HttpCookie aCookie = new HttpCookie("Url-Referrer"); 
      aCookie.Value = data; 
      aCookie.Expires = DateTime.Now.AddDays(2); 
      filterContext.HttpContext.Response.Cookies.Add(aCookie); 
     } 

     base.OnActionExecuted(filterContext); 
    } 
} 

一旦我有我的自定義操作過濾器,我能夠去Global.asax

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    ... 
    filters.Add(new CheckForAd()); 
} 

這讓我設置任何行動/控制器的cookie的時候沒有要求我裝飾一個動作/控制器。這也不需要我的控制器從標準Controller以外的任何東西中派生出來(我不想忘記這一點,然後在需要時沒有設置cookie)。

+0

是的,這幾乎是我的意思。 –

+0

有用,謝謝! –

2

創建自定義操作篩選器,然後查找請求變量並在其中設置Cookie。

http://msdn.microsoft.com/en-us/library/dd410056(v=vs.90).aspx

+0

基於此,我需要裝飾我想尋找的每一個動作/控制器(除非我可以將它註冊到某個地方,它將適用於所有東西)。這正是我想要擺脫的。我不想確保我的控制器/操作是裝飾的。 – Jared

+0

+1導致我回答 – Jared

2

創建一個自定義控制器將讀取的變量,像

public class BaseController:Controller 
{ 
    protected override void ExecuteCore() 
    { 

     var somevar = HttpContext.Request.QueryString["SomveVariable"]; 
     . 
     . 
     . 
     base.ExecuteCore(); 
    } 
} 

然後獲得從該自定義控制器的所有控制器。

相關問題