Search code examples
c#jsonhttpwebhttpwebrequest

C# HttpWebRequest "Request Header" in JSON POST


I am translating a JSON API into C# Methods, and I encountered a Problem where the JSON RPC API (POST) says

All other methods require the result from authentication ( = sessionId), either per pathparameter

;jsessionid=644AFBF2C1B592B68C6B04938BD26965

or per cookie (RequestHeader)

JSESSIONID=644AFBF2C1B592B68C6B04938BD26965

My current WebRequest Method:

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;
    }

How do I add the JSESSIONID Parameter to my WebRequest? I am not very familiar with WebRequests, please explain briefly!

Thank you!


Solution

  • Use Cookies.

    Your Case would look like this;

    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;
    }