2

URLで普遍的に監視したい変数がいくつかあります。それらが URL に設定されている場合、この情報を保存するために Cookie を設定したいと思います。

例えば...

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

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

どちらの場合も、私はSomeVariable返信を受け取りたいと思っています (そして、ウェブサイト全体のコントローラー/アクションでこれを望んでいます.

私はそれのクッキーの部分を解決し、ホームページで機能させていますが、今はホームページ以外のいくつかの URL に人々をドロップしたいと思っており、これが変更されるたびにロジックをやり直す必要はありません.

これはできますか?コードはどこに配置すればよいですか?

4

3 に答える 3

2

カスタム アクション フィルターを作成し、要求変数を探して、その中に Cookie を設定します。

http://msdn.microsoft.com/en-us/library/dd410056(v=vs.90).aspxを参照してください。

于 2012-09-01T08:21:08.090 に答える
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 を設定しませんでした)。

于 2012-09-01T08:48:22.517 に答える
2

次のような変数を読み取るカスタムコントローラーを作成します

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

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

次に、このカスタム コントローラーからすべてのコントローラーを派生させます。

于 2012-09-01T08:30:54.857 に答える