Какой домен я должен дать этот файл cookie? - PullRequest
3 голосов
/ 12 октября 2010

Я пытаюсь вызвать веб-сервис из приложения c #, используя sessionID.
Для этого мне нужно установить заголовок «Домен» в куки.

В Fiddler это выглядит так: "ASP.NET_SessionId = izdtd4tbzczsa3nlt5ujrbf5" (в файле cookie не указан домен).

Веб-сервис находится по адресу - "http://[some ip идет сюда]: 8989 / MyAPI.asmx".

Я пробовал:
http://[ip],
http://[ip]:8989,
http://[ip]:8989/MyAPI.asmx

Все это вызывает ошибку во время выполнения.

Я также пробовал один ip (т.е. 100.10.10.10), который не вызывает ошибку времени выполнения и устанавливает cookie, но 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);
}

Так каким должен быть домен?

Спасибо.

Ответы [ 3 ]

1 голос
/ 12 октября 2010

Я считаю, что это должно быть просто [ip].Удалите http: // часть того, что вы пробовали.

Согласно этой странице на MSDN, ваш код должен быть

cookie.Domain = "100.10.10.10";

Далее, именно то, чтоошибка вы получаете?Кроме того, вы путаете ошибку компиляции с ошибкой времени выполнения?Мне трудно поверить, что вы получаете ошибку компиляции, так как Domain является свойством String, что означает, что вы можете поместить в него практически все.

Наконец, почему вы отправляете cookie в веб-сервис?Обычный способ - передать все в форме сообщения или в строке запроса.


Обновление

Кстати, если вам абсолютно необходимо добавить файл cookie взаголовок для того, чтобы передать его веб-службе, способ, которым вы это делаете (взято из здесь ):

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 в домене должно гарантировать, что cookie отправляется только в указанный домен.Однако, если вы инициируете запрос и пытаетесь добавить к нему файл cookie, тогда лучше всего добавить его в виде строки в заголовки запроса.

0 голосов
/ 20 июля 2012
// 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);
}
0 голосов
/ 13 октября 2010

Причина, по которой куки не были отправлены, состоит в том, что длина содержимого запроса должна быть установлена ​​ после добавления куки, а не до.
Домен - это только ip.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...