我想在web api中创建一个演示登录服务,并且需要在响应中设置一个cookie。我怎么做?或者有没有更好的方法来进行授权?如何在HttpReponseMessage上设置响应cookie?
回答
添加参考System.Net.Http.Formatting.dll
,并使用在HttpResponseHeadersExtensions
类中定义的AddCookies
扩展方法。
这里是a blog post describing this approach和MSDN topic。
如果该程序集是不适合你的选择,这是我从在此之前旧的答案是选项:
年长的答案如下
我喜欢的HttpResponseMessage
领域内保持这种做法无出血到这是不一样单元测试,并根据宿主并不总是适用的HttpContext:
/// <summary>
/// Adds a Set-Cookie HTTP header for the specified cookie.
/// WARNING: support for cookie properties is currently VERY LIMITED.
/// </summary>
internal static void SetCookie(this HttpResponseHeaders headers, Cookie cookie) {
Requires.NotNull(headers, "headers");
Requires.NotNull(cookie, "cookie");
var cookieBuilder = new StringBuilder(HttpUtility.UrlEncode(cookie.Name) + "=" + HttpUtility.UrlEncode(cookie.Value));
if (cookie.HttpOnly) {
cookieBuilder.Append("; HttpOnly");
}
if (cookie.Secure) {
cookieBuilder.Append("; Secure");
}
headers.Add("Set-Cookie", cookieBuilder.ToString());
}
然后你就可以在响应中包含一个cookie像这样:
HttpResponseMessage response;
response.Headers.SetCookie(new Cookie("name", "value"));
我同意,这看起来像一个更好的选择。更改了接受的答案,以指导用户未来。 – 2013-01-14 06:49:57
这可能不再是答案吗?我发现这个DLL的唯一方法是通过Nuget,它明确指出它是为WebApi.Client高于2.0,低于2.1,所以这个答案是WebApi 2.我们现在与ASP.NET 4和I无法找到这个dll了。 – 2013-09-24 14:28:44
@IsaacLlopis我想他们把它从扩展DLL移到了核心。 – 2014-06-12 20:10:38
您可以将Cookie添加到HttpContext.Current.Response.Cookies集合。
var cookie = new HttpCookie("MyCookie", DateTime.Now.ToLongTimeString());
HttpContext.Current.Response.Cookies.Add(cookie);
谢谢,正是我想要的,应该想到我自己。但实际上预计可以通过'HttpResponseMessage'获得。 – 2012-03-20 20:08:34
这是我的第一个猜测,但由于某种原因,它不是。对于测试能力来说,这肯定会更好。 – Maurice 2012-03-20 20:13:54
这个答案违背了WebAPI的使用方式。您不应该从WebAPI引用HttpContext.Current,因为如果您是自主主机,则它不会存在。测试位缺少像这样的辅助工具的负载。 RC将AddCookies()扩展方法添加到您应该使用的HttpResponseMessage.Headers中。 – Andrew 2012-07-09 09:04:16
- 1. 如何设置域响应[“设置Cookie”]
- 2. 在WinHttp中响应设置Cookie
- 3. 在mojolicious响应中设置cookie
- 4. 如何在升级到.Net后设置ScriptingContext响应cookie
- 5. 如何在OData响应Olingo中设置cookie?
- 6. 如何设置快速会话cookie在响应中过期
- 7. 将cookie设置为HttpContext响应
- 8. 设置Cookie响应和请求
- 9. Cookie的集装箱不设置Cookie响应头部约束
- 10. 在Zend Controller上设置Cookie
- 11. 如何在加载影响中设置Cookie?
- 12. 如何在响应中设置axios的响应状态
- 13. 在响应对象中访问设置Cookie
- 14. RestSharp在响应对象上没有cookie
- 15. 如何从cookie中读取cookie,当cookie设置在不同的子域上时?
- 16. 未在Cookie中设置Cookie
- 17. NightmareJS:如何设置cookie?
- 18. 如何设置cookie值?
- 19. 如何在Swift上设置WkWebView上的Cookie?
- 20. 如何在Ruby on Rails上的cookie上设置HttpOnly标志
- 21. 如何设置Expressjs对XML的响应?
- 22. 如何设置响应标头
- 23. 阿卡-HTTP:如何设置响应头
- 24. NodeJS:如何全局设置Mongoose响应?
- 25. 如何在django中设置登录cookie?
- 26. 如何在Symfony2中设置推荐cookie?
- 27. 如何在PHP中为域设置Cookie
- 28. 如何在SSP Netsuite中设置cookie?
- 29. 如何在BaseHttpServer中设置多个Cookie?
- 30. 如何在Lighttpd中设置无Cookie域?
它看起来不像你可以在HttpResponseMessage上设置cookie。看看这个线程,也许它会帮助http://stackoverflow.com/questions/5463431/setting-cookies-within-a-wcf-service – 2012-03-20 19:37:15