如何在HttpClient的HttpRequestMessage上设置一个cookie
我正在尝试使用web api的HttpClient
来发送一个端点,需要以HTTP cookie的formslogin,这个HTTP cookie标识了一个帐号(这只是从发行版本中#ifdef
删除的东西)。
如何添加一个cookie到HttpRequestMessage
?
以下是您可以如何为请求设置自定义Cookie值:
var baseAddress = new Uri("http://example.com"); var cookieContainer = new CookieContainer(); using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer }) using (var client = new HttpClient(handler) { BaseAddress = baseAddress }) { var content = new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("foo", "bar"), new KeyValuePair<string, string>("baz", "bazinga"), }); cookieContainer.Add(baseAddress, new Cookie("CookieName", "cookie_value")); var result = client.PostAsync("/test", content).Result; result.EnsureSuccessStatusCode(); }
接受的答案是在大多数情况下做到这一点的正确方法。 但是,在某些情况下,您需要手动设置Cookie标头。 通常情况下,如果您设置了“Cookie”标头,它将被忽略,但是这是因为HttpClientHandler
默认使用CookieContainer
属性来存储Cookie。 如果你禁用了,那么通过设置UseCookies
为false
你可以手动设置cookie头,他们会出现在请求,例如
var baseAddress = new Uri("http://example.com"); using (var handler = new HttpClientHandler { UseCookies = false }) using (var client = new HttpClient(handler) { BaseAddress = baseAddress }) { var message = new HttpRequestMessage(HttpMethod.Get, "/test"); message.Headers.Add("Cookie", "cookie1=value1; cookie2=value2"); var result = await client.SendAsync(message); result.EnsureSuccessStatusCode(); }
- 盒式磁带捆绑与MVC4捆绑
- 客户端列表的MVC自定义validation
- 在MVC中的Ajax.BeginForm来上传文件
- Razor MVC使用Model Array填充Javascript数组
- login请求validation令牌问题
- aspnet_regiis.exe -ir在Windows 8上不起作用
- ASP.NET MVC 4,抛出HttpException vs返回HttpStatusCodeResult?
- 如何添加对MVC-3-converted-to-4应用程序的System.Web.Optimization的引用
- ASP.NET MVC 4 + Ninject MVC 3 =没有为此对象定义的无参数构造函数