我遇到了ServiceStack和Cookie问题 - 我无法从内置的C#JsonServiceClient中读取,也无法在我的服务上设置Cookie。Servicestack - 无法从C#中读取或设置Cookie客户端
web服务正在运行,对SSL,在这个领域:
https://sites.sub.domain.co.uk/Api/
和网站调用服务位于:
https://sites.sub.domain.co.uk/Website/
当我试图设置一个cookie的服务,从而:
this.Response.Cookies.AddCookie(cookie);
其中cookie
被设定为的域,没有任何反应。服务完全按预期执行,并返回预期的响应,但未设置cookie,并且没有异常。
我也试图在响应过滤器中使用提供的res
对象执行此操作,并得到相同的结果。
其次,当使用c#客户端调用服务时,不会发送任何cookie。我退出每个请求的整个请求,在我APPHOST,
RequestFilters.Add((req, res, dto) => { Log(req.Cookies); });
和饼干总是空白,但我可以明确地在浏览器中看到,有一些饼干存在,并且小提琴手显示Cookie
头上满是请求的东西。
所发出的呼吁是非常沼泽标准JsonServiceClient
POST
要求,从代码的aspx页面上进行后面:
var client = new JsonServiceClient("somewhere");
var response = client.Post(new RequestForStuff());
任何建议深受欢迎。
更新
在调查中,我叫通过HTML表单提交的服务之一,这确实有由当时的Cookie集合我登录的请求......我”的所有Cookie ð希望看到的是有...
另一个更新
我继续用不同的方式测试服务。在Chrome中使用REST控制台时,Cookie由浏览器发送,并且我试图在响应中创建的Cookie都正常工作,但同样使用相同参数调用相同服务时,来自ac# JsonServiceClient,cookies既不发送也不设置。
从成功的请求的标头(来自REST控制台)(序列化JSON在日志文件中):
{
"Header": "Connection",
"Value": "keep-alive"
},
{
"Header": "Content-Length",
"Value": "124"
},
{
"Header": "Content-Type",
"Value": "application/json"
},
{
"Header": "Accept",
"Value": "application/json"
},
{
"Header": "Accept-Charset",
"Value": "ISO-8859-1,utf-8;q=0.7,*;q=0.3"
},
{
"Header": "Accept-Encoding",
"Value": "gzip,deflate,sdch"
},
{
"Header": "Accept-Language",
"Value": "en-GB,en-US;q=0.8,en;q=0.6"
},
{
"Header": "Cookie",
"Value": massive load of stuff...
},
{
"Header": "Host",
"Value": "sites.sub.domain.co.uk"
},
{
"Header": "User-Agent",
"Value": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31"
},
{
"Header": "Origin",
"Value": "chrome-extension://cokgbflfommojglbmbpenpphppikmonn"
}
而且从失败的C#客户端调用:
{
"Header": "Content-Length",
"Value": "124"
},
{
"Header": "Content-Type",
"Value": "application/json"
},
{
"Header": "Accept",
"Value": "application/json"
},
{
"Header": "Accept-Encoding",
"Value": "gzip,deflate,gzip, deflate"
},
{
"Header": "Expect",
"Value": "100-continue"
},
{
"Header": "Host",
"Value": "sites.sub.domain.co.uk"
}
我打过关于请求上的标题:
JsonServiceClient.HttpWebRequestFilter = f => f.Headers.Add(...
但无济于事。
更新与修复
继从paacshpa答案,我把这个代码在客户端:
JsonServiceClient.HttpWebResponseFilter = d =>
{
foreach (Cookie co in d.Cookies)
{
var htc = new HttpCookie(co.Name, co.Value) { Domain = co.Domain, Path = "/" };
HttpContext.Current.Response.Cookies.Add(htc);
}
};
和急,饼干在浏览器中。
Does cookie.Secure = true? – jeffgabhart 2013-04-09 20:00:23
不 - 应该吗? – 2013-04-09 20:01:06
Nah - 回想起来很弱的问题 – jeffgabhart 2013-04-09 20:16:22