2017-07-17 4 views
1

私はカスタムバリュープロバイダを実装しました。そして私は、私はmvcがQuerystringのデフォルト使用の代わりにCookieに基づいてカスタム値プロバイダを使用するように強制します

ValueProviderFactories.Factories.Add(new Listhell.CODE.CustomValueProviderFactory()); 

ようGlobal.asaxの中で値プロバイダーを登録

public async ReturnType ads(int lid=0) 

含むクエリ文字列

ads?lid=val 

のようなもの、私のアクション定義とのリンクを持っているしかし、私はリンクをクリックしたときコントローラ上ではクエリ文字列の値を取得しますが、クッキー値は取得しません

mvcの作成方法カスタム値プロバイダを使用してデフォルトの動作ではなくクッキー値をコントローラに渡す

+0

コードでは、httpパラメータを使用してデータを渡します。次にCookieについて言及しますが、httpパラメータはCookieではありません。 CustomValueProviderFactoryがクッキーから値を取得しようとしていることを意味しますか?はっきりさせるべきことがあります。 –

+0

@EmmanuelDURINカスタム値プロバイダは、クッキー値を読み取り、返します。しかし、問題は、Cookieの名前である「lid」という名前のキーとブラウザ内のその名前についてのトリガリングではないということです。何か案が? – Alex

答えて

0

クエリ文字列などのようなビルトインプロバイダがいくつかあります。これらのプロバイダは、チェーンの開始から1つずつ呼び出され、そのうちのいくつかが値を提供できるようになるまで、呼び出されます。

だから、次のコード行で、デフォルト値プロバイダーチェーンの上に「CustomValueProviderFactory」を登録する必要があります。

ValueProviderFactories.Factories.Insert(0, new Listhell.CODE.CustomValueProviderFactory()); 

ので、カスタム値プロバイダーは、まず第一に呼ばれて、あなたはどこから値を取得する必要がありますあなたが必要です。次のコード行は、この値をクッキーから取得する方法を示しています。

public class CookieValueProvider: IValueProvider 
{ 
    public bool ContainsPrefix(string prefix) 
    { 
     return HttpContext.Current.Request.Cookies[prefix] != null; 
    } 

    public ValueProviderResult GetValue(string key) 
    { 
     if(HttpContext.Current.Request.Cookies[key] == null) 
      return null; 

     return new ValueProviderResult(HttpContext.Current.Request.Cookies[key], 
      HttpContext.Current.Request.Cookies[key].ToString(), CultureInfo.CurrentCulture); 
    } 
} 

これは役立つことを望みます。

関連する問題