我有一些 jQuery JavaScript 调用一个简单的 WCF Web 服务。对我来说,在 JavaScript 中设置 cookie 并在服务器端读取它相当容易。
这是该代码。
客户端(JavaScript):
document.cookie = "father=christmas";
服务器端(WCF 中的 C#):
var cookieHeader = WebOperationContext.Current.IncomingRequest.Headers[System.Net.HttpRequestHeader.Cookie];
if (!String.IsNullOrEmpty(cookieHeader))
{
var match = cookieHeader.Split(';').Select(cookie => cookie.Split('=')).FirstOrDefault(kvp => kvp[0] == "father");
if (match != null)
{
result = match[1]; // result now equals "christmas"
}
}
但我还想在服务器上的 WCF 中设置一个 cookie 并在客户端上读取它。这是我的代码,但无法做到这一点。
服务器端(WCF 中的 C#):
WebOperationContext.Current.OutgoingResponse.Headers[System.Net.HttpResponseHeader.SetCookie] = "cloud=lonely";
客户端(jQuery JavaScript):
$(document).ready(function () {
$.ajax({
url: "/ScratchpadSite/Service.svc/Hallo",
type: "POST",
success: function (data, textStatus, jqXHR) {
var xrh = jqXHR.getAllResponseHeaders();
$('body').html('<p>Father ' + data.d + '<\/p>');
},
error: function (jqXHR, textStatus, errorThrown) {
$('body').html('<p>' + textStatus + ': ' + errorThrown + '<\/p>');
}
});
});
然而 xhr 的值(我希望包含我的“cloud=lonely”cookie 的变量)是
Server: ASP.NET Development Server/10.0.0.0
Date: Wed, 04 Apr 2012 15:29:27 GMT
X-AspNet-Version: 4.0.30319
Content-Length: 17
Cache-Control: private
Content-Type: application/json; charset=utf-8
Connection: Close
(注意:我的网页(包括 JavaScript)和 WCF 服务驻留在同一服务器上,因此应该不存在跨域问题。)
我是否正确设置了响应标头 cookie?如果是这样,我应该在哪里寻找回报给客户的价值?如果不是我应该怎么做?