我正在尝试使用sessionID从c#应用程序调用Web服务 为此,我需要在cookie中设置“Domain”标头。
在Fiddler中它看起来像 - “ASP.NET_SessionId = izdtd4tbzczsa3nlt5ujrbf5”(cookie中没有指定域)。
Web服务位于 - “http:// [some ip goes here]:8989 / MyAPI.asmx”。
我试过了:
http:// [ip],
http:// [ip]:8989,
http:// [ip]:8989 / MyAPI.asmx
所有这些都会导致运行时错误。
我还尝试了单独的ip (即100.10.10.10),这不会导致运行时错误,并设置cookie,但是当我调用web时,cookie永远不会被发送方法。
以下是我设置域名的代码:
if (!string.IsNullOrEmpty(currentSessionID))
{
req.CookieContainer=new CookieContainer();
Cookie cookie = new Cookie("ASP.NET_SessionId", currentSessionID);
cookie.Domain = GetCookieUrl(); //<- What should this be?
req.CookieContainer.Add(cookie);
}
那么域应该是什么?
感谢。
答案 0 :(得分:1)
我相信它应该只是[ip]。删除http://您尝试过的部分。
根据MSDN上的this page,您的代码应为
cookie.Domain = "100.10.10.10";
接下来,你到底发生了什么错误?另外,您是否将Compile错误与运行时错误混淆?我发现很难相信你得到一个编译错误,因为Domain是一个String属性,这意味着你可以在其中放入任何东西。
最后,为什么要向网络服务发送cookie?通常的方法是传递表单post或查询字符串中的所有内容。
<强>更新强>
顺便说一句,如果你绝对必须在标题中添加一个cookie以便将它传递给一个Web服务,你这样做的方式是(取自here):
byte[] buffer = Encoding.ASCII.GetBytes("fareId=123456"); //the data you want to send to the web service
HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(url);
WebReq.Method = "POST";
WebReq.ContentType = "application/x-www-form-urlencoded";
WebReq.ContentLength = buffer.Length;
WebReq.Headers["Cookie"] = "ASP.NET_SessionId=izdtd4tbzczsa3nlt5ujrbf5"
Stream PostData = WebReq.GetRequestStream();
请注意,这会将标头与请求内联设置,而不会实例化“cookie”对象。 Cookie的Domain属性有助于确保cookie仅发送到列出的域。但是,如果您正在启动请求并尝试向其附加cookie,那么最好的方法是将其作为字符串添加到请求标头中。
答案 1 :(得分:0)
未发送Cookie的原因是请求的内容长度应在添加Cookie后设置,而不是之前。
域名是ip。
答案 2 :(得分:0)
// Simple function to get cookie domain
private string GetCookieDomain(string uri)
{
Uri req_uri = new Uri(uri);
return req_uri.GetComponents(UriComponents.Host, UriFormat.Unescaped);
}