C#HttpWebRequest的“请求头”,在JSON POST
我翻译一个JSON API为C#的方法,我遇到了一个问题,即在JSON RPC API(POST)说C#HttpWebRequest的“请求头”,在JSON POST
其他所有方法都需要从认证结果(=的sessionId),或者每pathparameter
;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不是很熟悉,请简单解释一下!
谢谢!
使用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;
}
您可以直接添加该令牌您的网址:
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create($"{url}?jsessionid={sessionId}");
还是在标题:
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create({url);
httpWebRequest.Headers["JSESSIONID"] = sessionId;
我试过了,我仍然得到服务器的否定响应。我不确定是否有其他问题导致问题,但.. –
如果它有效,您应该尝试{url}?; jsessionid = {sessionId}和{url}; jsessionid = {sessionId}。 –
您是否尝试直接添加到您的网址? –
正如@RomEh建议的那样,您可以将参数添加到Url中作为查询字符串参数,或者您可以使用键“sessionid”和“json”以及它们的值创建一个字典对象,将其序列化为json字符串,然后将其添加到请求流。 –