C# 我应该给这个cookie什么域?
我正在尝试使用sessionID从c#应用程序调用web服务。C# 我应该给这个cookie什么域?,c#,.net,cookies,C#,.net,Cookies,我正在尝试使用sessionID从c#应用程序调用web服务。 为了做到这一点,我需要在cookie中设置“域”头 在Fiddler中,它看起来像“ASP.NET_SessionId=izdtd4tbzczsa3nlt5ujrbf5”(cookie中没有指定域) web服务位于“http://[someip-goeshere]:8989/MyAPI.asmx” 我试过: http://[ip], http://[ip]:8989, http://[ip]:8989/MyAPI.asmx 所有这些
为了做到这一点,我需要在cookie中设置“域”头 在Fiddler中,它看起来像“ASP.NET_SessionId=izdtd4tbzczsa3nlt5ujrbf5”(cookie中没有指定域) web服务位于“http://[someip-goeshere]: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);
}
if(!string.IsNullOrEmpty(currentSessionID))
{
req.CookieContainer=新CookieContainer();
Cookie Cookie=新Cookie(“ASP.NET_SessionId”,currentSessionID);
cookie.Domain=GetCookieUrl();//我认为它应该是[ip]。删除您尝试过的内容的http://部分
根据MSDN,您的代码应该是
cookie.Domain = "100.10.10.10";
接下来,您到底得到了什么错误?另外,您是否将编译错误与运行时错误混淆?我发现很难相信您得到了编译错误,因为域是一个字符串属性,这意味着您可以在其中放入几乎任何内容
最后,为什么要向web服务发送cookie呢?通常的方法是传递表单post或查询字符串中的所有内容
更新
顺便说一句,如果为了将cookie传递给web服务,您必须将cookie添加到标头中,那么这样做的方式是(取自):
请注意,这将在不实例化“cookie”的情况下设置与请求内联的标头对象。cookie的域属性有助于确保cookie仅发送到列出的域。但是,如果您正在启动请求并尝试向其附加cookie,则最好的方法是将其作为字符串添加到请求头中。未发送cookie的原因是请求的内容长度应为set在添加cookie之后,而不是之前。
域是单独的ip。我已经尝试过单独的ip(正如我在问题中所写的),当我调用web服务时,cookie不会被发送。关于“时间”你是对的,cookie是.NET的cookie(我应该尝试httpCookie吗?),当我只使用ip发送请求时,当我调用请求时它不会被发送(我从Fiddler那里知道).至于为什么要发送cookie,我很确定浏览器就是这么做的(同样,Fiddler)你试过10.0.0.1:8989吗?忽略http://部分…你能发布一个指向说明的链接,告诉你需要设置域吗?我从来没有听说过调用web服务的这种要求,我很好奇。总是想学习一些新的东西。@David,我是通过反复试验得到的。忽略域会导致错误编译器告诉您忘记指定域。@Oren A这是一个基于.NET的服务?还有一件事,您是否尝试过像第一次调用WS之前那样设置CookieContainer实例,然后从GetResponse()中提取实例并在后续调用中使用?
// 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);
}
// 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);
}