有一个更好的方法来获得一个cookie值在ActionFilterAttribute

本文关键字:一个 cookie ActionFilterAttribute 值在 更好 方法 有一个 | 更新日期: 2023-09-27 18:04:54

我有一个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;
    }
});

所以我必须进入header并获得包含我想要的cookie名称的cookie header。但这给了我一个CookieHeaderValues的集合,所以我必须取第一个,它本身包含一个cookie属性它是一个CookieStates的集合。我将这个集合转换为一个列表,并对其运行forEach,直到找到名称与我想要的cookie名称匹配的CookieState,然后保存该CookieState的值。

对我来说,我需要经历这么多,只是为了得到一个cookie值,这似乎很疯狂。肯定有更好、更直接的方法来获取我知道名字的特定cookie及其值吧?

有一个更好的方法来获得一个cookie值在ActionFilterAttribute

cookie = actionContext.Request.Headers.GetCookies("NameOfTheCookieIWant").FirstOrDefault();
if (cookie != null)
{
    string val = cookie["NameOfTheCookieIWant"].Value;
}
var cookie = actionContext.RequestContext.HttpContext.Request.Cookies["NameOfTheCookieIWant"];
var value = cookie == null ? "" : cookie.Value

我建议编写一个包装器类或实用程序函数来获取cookie值特别是如果你必须反复执行此操作