Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果任何操作上存在变量,则设置cookie_C#_Asp.net Mvc 3_Arguments - Fatal编程技术网

C# 如果任何操作上存在变量,则设置cookie

C# 如果任何操作上存在变量,则设置cookie,c#,asp.net-mvc-3,arguments,C#,Asp.net Mvc 3,Arguments,我有几个变量,我希望在url中得到普遍关注。如果它们是在url中设置的,我想设置一个cookie来存储这些信息 例如 http://www.website.com/?SomeVariable=something 及 http://www.website.com/SomeController/SomeAction?SomeVariable=something 在这两种情况下,我都希望SomeVariable得到响应(我希望在整个网站的任何控制器/操作上都能得到响应) 我有它的cookie部分的工作

我有几个变量,我希望在url中得到普遍关注。如果它们是在url中设置的,我想设置一个cookie来存储这些信息

例如

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

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

在这两种情况下,我都希望
SomeVariable
得到响应(我希望在整个网站的任何控制器/操作上都能得到响应)

我有它的cookie部分的工作,并在主页上运行,但我想把人们放在一些网址上除了主页现在,并希望不必重做任何时候,这一变化的逻辑


可以这样做吗?我应该把代码放在哪里?

创建一个自定义操作筛选器,然后查找请求变量并在其中设置cookies


请参见创建一个将读取变量的自定义控制器,如

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

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

然后从这个自定义控制器派生所有控制器。

好的,我最终根据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,而不需要我装饰动作/控制器。这也不需要我的控制器从标准
控制器
之外的任何东西派生(我不想忘记这一点,然后在需要时不设置cookie).

基于此,我需要装饰我想要寻找的每个动作/控制器(除非我可以在某个地方注册它,使其适用于所有东西)。这就是我想要摆脱的。我不想确保我的控制器/动作都装饰好。是的,这正是我的意思。