Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该给这个cookie什么域?_C#_.net_Cookies - Fatal编程技术网

C# 我应该给这个cookie什么域?

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 所有这些

我正在尝试使用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

所有这些都会导致运行时错误

我还单独尝试了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);
}