有没有更好的方法在ActionFilterAttribute中获取cookie值?

时间:2016-08-31 19:25:53

标签: c# .net cookies asp.net-web-api 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名称的cookie标题。但这给了我一个CookieHeaderValues的集合,所以我必须采取其中的第一个,它本身包含一个Cookie属性,它是CookieStates的集合。我将此集合转换为列表并在其上运行forEach,直到找到名称与我想要的cookie名称相匹配的CookieState,然后保存该CookieState的值。

我觉得我需要经历这么多只是为了获得一个cookie值。当然,有一个更好,更直接的方式来获得一个特定的cookie,我知道它的名字及其价值?

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我想写一个包装类或实用函数来获取cookie值,特别是如果你不得不一遍又一遍地这样做。