2016-08-31 122 views
0

我有一个ActionFilterAttribute需要从请求中获取一个cookie值。下面是相关的代码:有没有更好的方法来获取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属性,它是CookieState的集合。我把这个集合变成一个列表,并在其上运行forEach,直到找到名称与我想要的cookie名称匹配的CookieState,然后保存该CookieState的值。

对我来说,我似乎很疯狂,我需要经过这么多才能获得cookie值。当然,有一种更好,更直接的方式来获得一个特定的cookie,我知道谁的名字和它的价值?

+0

是关于MVC或WebApi项目的问题吗?请添加相关标签。但它似乎是关于WebApi的。 –

+0

我知道我忘了一个。添加了asp.net-web-api标签,谢谢。 –

回答

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

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

这是我期待的改进,谢谢! –

+1

这是一个[链接](https://github.com/datafile4/book-store/blob/beta/BookStore/BookStore/Controllers/Attributes.cs)到一个示例WebApi项目,我的朋友和我目前正在这仅用于学习目的。目前它处于开发阶段,但我认为你会发现它很有用。 –

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

当我尝试这样做时,我得到''HttpActionExecutedContext''不包含'RequestContext''的定义;也许这是一个MVC解决方案,不适用于WebAPI? –

+0

这个答案似乎是为MVC项目,而问题是关于WebApi。但这不是你的错,作者也没有添加标签。 –

+0

空检查可以简化为'var value = cookie?.Value ?? “”;' –

0

我会说写一个包装类或用于获取Cookie值,特别是如果你不得不一遍又一遍地做一个效用函数。

相关问题