【发布时间】:2015-04-04 11:21:45
【问题描述】:
我正在尝试将我的 .net 客户端 api 请求上的 cookie 发布到远程服务器。
使用 Fiddler,我可以看到我需要的 cookie 如下所示:
请求发送265字节的Cookie数据:
cookiesDirective=1; __utmt=1; currentLanguage=EN;
__utma=198151921.81872271.1398032350.1423043623.1423075781.3;
__utmb=198151921.3.10.1423075781;
__utmc=198151921;
__utmz=198151921.1423043623.2.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)
但是,当我发布我的 api 调用时,我的 cookie 容器是空的(根据 Fiddler)
我的代码如下:
static async Task RunAsync()
{
string url = "http://www.myserver.com/Services/GetData";
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:9000/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var model = new Payload() { pageNumber = 2 };
var cookie = new CookieHeaderValue("session-id", "12345");
cookie.Expires = DateTimeOffset.Now.AddDays(1);
cookie.Path = "/";
HttpResponseMessage response = new HttpResponseMessage();
response.Headers.AddCookies(new CookieHeaderValue[] { cookie });
response = await client.PostAsJsonAsync(url, model);
if (response.IsSuccessStatusCode)
{
// Testing
}
}
}
【问题讨论】:
-
还可以考虑在与 REST 服务通信时使用 RestSharp (restsharp.org)..
-
在 response 对象上设置 cookie 对您没有多大用处,它是管理服务器发送给您的内容的对象。您需要在实际发送 request 的对象上设置 cookie,在您的代码中将是
client。请参阅@mikey 提供的链接,了解如何执行此操作。
标签: c# asp.net asp.net-web-api