我想在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. 在mojolicious響應中設置cookie
- 3. 在WinHttp中響應設置Cookie
- 4. 如何在升級到.Net後設置ScriptingContext響應cookie
- 5. 如何設置快速會話cookie在響應中過期
- 6. 如何在OData響應Olingo中設置cookie?
- 7. 設置Cookie響應和請求
- 8. 將cookie設置爲HttpContext響應
- 9. jQuery AJAX響應設置Cookie標頭
- 10. 如何在wordpress網站上設置cookie?
- 11. 如何在Html文件上設置Cookie?
- 12. 如何在點擊上設置Cookie?
- 13. 如何從scrapy響應獲取cookie並將cookie設置爲下一個請求?
- 14. Cookie的集裝箱不設置Cookie響應頭部約束
- 15. jQuery $ .cookie不讀取由服務器響應設置的cookie
- 16. 如何設置cookie?
- 17. 在Zend Controller上設置Cookie
- 18. 如何在JQuery中設置響應
- 19. 如何在加載影響中設置Cookie?
- 20. 如何在子域中設置document.domain影響域的cookie?
- 21. 在Jetty服務器上設置響應
- 22. 如何爲應急響應設置wiki?
- 23. 如何在響應中設置axios的響應狀態
- 24. 在響應對象中訪問設置Cookie
- 25. RestSharp在響應對象上沒有cookie
- 26. 如何從cookie中讀取cookie,當cookie設置在不同的子域上時?
- 27. 如何在express.js資產上設置響應標頭
- 28. 在子域上設置TLD上的cookie
- 29. 如何使用Api和TableView在ios中設置響應設置?
- 30. 未在Cookie中設置Cookie
它看起來不像你可以在HttpResponseMessage上設置cookie。看看這個線程,也許它會幫助http://stackoverflow.com/questions/5463431/setting-cookies-within-a-wcf-service – 2012-03-20 19:37:15