我遇到了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