C# HttpWebRequest "Request Header" in JSON POST



我正在将JSON API转换为C#方法,我遇到了一个问题,其中JSON RPC API(POST)说

所有其他方法都需要身份验证的结果(= sessionID),要么每个路径参数

;jsessionid=644AFBF2C1B592B68C6B04938BD26965

或每个cookie(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并不熟悉,请简要解释!

谢谢!

使用cookie。

您的情况看起来像这样;

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

您可以将令牌直接添加到您的URL:

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

或标题:

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

最新更新