2017-02-20 4 views
1

Я переводите JSON API в C# методы, и я столкнулся с проблемой, где JSON RPC API (POST) говоритC# HttpWebRequest «заголовок запрос» в формате JSON POST

Все другие методы требуют результата аутентификации (= SESSIONID), либо за pathparameter

;jsessionid=644AFBF2C1B592B68C6B04938BD26965

или на печенье (RequestHeader)

JSESSIONID=644AFBF2C1B592B68C6B04938BD26965

Мой текущий WebRequest Метод:

private async static Task<string> SendJsonAndWait(string json, string url, string sessionId) { 
     string result; 

     HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url); 
     httpWebRequest.ContentType = "application/json"; 
     httpWebRequest.Method = "POST"; 

     using(StreamWriter streamWriter = new StreamWriter(await httpWebRequest.GetRequestStreamAsync())) { 
      await streamWriter.WriteAsync(json); 
      streamWriter.Flush(); 
      streamWriter.Close(); 
     } 

     HttpWebResponse httpResponse = (HttpWebResponse)await httpWebRequest.GetResponseAsync(); 
     Stream responseStream = httpResponse.GetResponseStream(); 
     if(responseStream == null) 
      throw new Exception("Response Stream was null!"); 

     using(StreamReader streamReader = new StreamReader(responseStream)) { 
      result = await streamReader.ReadToEndAsync(); 
     } 

     return result; 
    } 

Как добавить JSESSIONID параметр к моему WebRequest? Я не очень хорошо знаком с WebRequests, объясните кратко!

Спасибо!

+1

Вы пытались добавить свой URL прямо сейчас? –

+0

Как показано в @RomEh, вы можете добавить параметр в Url в качестве параметра строки запроса или создать объект словаря с ключами 'sessionid' и' json' вместе со своими значениями, сериализовать его как строку json, а затем добавьте его в поток запросов. –

ответ

1

Использование Cookies.

Ваше дело будет выглядеть так;

private async static Task<string> SendJsonAndWait(string json, string url, string sessionId) { 
    Uri uri = new Uri(url); 
    string result; 

    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url); 
    httpWebRequest.ContentType = "application/json"; 
    httpWebRequest.Method = "POST"; 

    //Add the JSESSIONID Cookie 
    if(httpWebRequest.CookieContainer == null) 
      httpWebRequest.CookieContainer = new CookieContainer(); 

    if(!string.IsNullOrWhiteSpace(sessionId)) 
      httpWebRequest.CookieContainer.Add(new Cookie("JSESSIONID", sessionId, "/", uri.Host)); 

    using(StreamWriter streamWriter = new StreamWriter(await httpWebRequest.GetRequestStreamAsync())) { 
     await streamWriter.WriteAsync(json); 
     streamWriter.Flush(); 
     streamWriter.Close(); 
    } 

    HttpWebResponse httpResponse = (HttpWebResponse)await httpWebRequest.GetResponseAsync(); 
    Stream responseStream = httpResponse.GetResponseStream(); 
    if(responseStream == null) 
     throw new Exception("Response Stream was null!"); 

    using(StreamReader streamReader = new StreamReader(responseStream)) { 
     result = await streamReader.ReadToEndAsync(); 
    } 

    return result; 
} 
0

Вы можете добавить маркер непосредственно на URL:

HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create($"{url}?jsessionid={sessionId}"); 

Или в заголовках:

HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create({url); 
httpWebRequest.Headers["JSESSIONID"] = sessionId; 
+0

Я пробовал это, и я все еще получаю отрицательный ответ от Сервера. Я не уверен, что что-то еще вызывает проблему, хотя ... –

+0

Вы должны попробовать {url} ?; jsessionid = {sessionId} и {url}; jsessionid = {sessionId}, если он работает. –

Смежные вопросы