我想在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