2016-08-31 10 views
0

私はリクエストからクッキー値を取得する必要があるActionFilterAttributeを持っています。ここでは、関連するコードは次のとおりです。ActionFilterAttributeでCookie値を取得するより良い方法はありますか?

List<CookieState> cookies = actionContext.Request.Headers.GetCookies("NameOfTheCookieIWant").FirstOrDefault().Cookies.ToList(); 

if (cookies == null) 
{ 
    throw new ArgumentNullException("cookie"); 
} 

string value = ""; 
cookies.ForEach(cookie => { 
    if (cookie.Name == "NameOfTheCookieIWant") { 
     value = cookie.Value; 
    } 
}); 

だから私は、ヘッダーに行くと、私はしたいクッキーの名前が含まれているCookieヘッダーを取得する必要があります。しかしこれは私にCookieHeaderValuesのコレクションを提供するので、私はCookieStatesのコレクションであるCookiesプロパティを含んでいる最初のものを取らなければなりません。このコレクションをリストにして、forEachを実行して、名前が目的のクッキーの名前と一致するCookieStateを見つけ、そのCookieStateの値を保存します。

クッキー値を取得するためには、あまりにも多くのことを行う必要があることは私には狂っているようです。確かに、私が知っている特定のクッキーとその価値を得るためのより良い、より直接的な方法がありますか?

+0

MVCまたはWebApiプロジェクトに関するご質問はありますか?関連タグを追加してください。それはWebApiについてだと思われる。 –

+0

私は1つを忘れていたことを知っていた。 asp.net-web-apiタグを追加しました。ありがとうございます。 –

答えて

2
cookie = actionContext.Request.Headers.GetCookies("NameOfTheCookieIWant").FirstOrDefault(); 

if (cookie != null) 
{ 
    string val = cookie["NameOfTheCookieIWant"].Value; 
} 
+0

これは私が探していた改善です、ありがとう! –

+1

私の友人と私が現在取り組んでいるサンプルWebApiプロジェクトには、[link](https://github.com/datafile4/book-store/blob/beta/BookStore/BookStore/Controllers/Attributes.cs)ですこれは学習目的のみのものです。今は開発段階ですが、役に立つと思っています。 –

1
var cookie = actionContext.RequestContext.HttpContext.Request.Cookies["NameOfTheCookieIWant"]; 
var value = cookie == null ? "" : cookie.Value 
+0

"HttpActionExecutedContext"には、これを実行しようとすると 'RequestContext'の定義が含まれません。おそらくこれはWebAPIで動作しないMVCソリューションですか? –

+0

この回答はMVCプロジェクトのようですが、質問はWebApiについてです。しかし、それはあなたのせいではない、著者はタグのどちらも追加しなかった。 –

+0

nullチェックは'var value = cookie?.Value ??のように単純化できます。 ""; ' –

0

私はあなたが何度もこれをしなければならない場合は特にクッキーの値を取得するためのラッパークラスやユーティリティ関数を書くと言うでしょう。

関連する問題