这个(借用/改编的)代码中是否缺少一些东西,或者我没有看到 Get 在哪里被触发
本文关键字:或者 在哪里 Get 借用 代码 是否 这个 | 更新日期: 2023-09-27 18:36:23
我在这里发布了一个发送HttpWebRequest的问题,但是仔细观察我的方法SendHTTPRequestNoCredentials(),我确定我改编自我过去一段时间在StackOverflow上找到的东西,似乎缺少了什么。看看这在你看来是否可疑,当 Http 方法是 Get 时:
public static HttpWebRequest SendHTTPRequestNoCredentials(string uri, HttpMethods method,
string data, string contentType)
{
WebRequest request = null;
try
{
request = WebRequest.Create(uri);
request.Method = Enum.ToObject(typeof(HttpMethods), method).ToString();
request.ContentType = contentType;
((HttpWebRequest)request).Accept = contentType;
((HttpWebRequest)request).KeepAlive = false;
((HttpWebRequest)request).ProtocolVersion = HttpVersion.Version10;
if (method != HttpMethods.GET && method != HttpMethods.DELETE)
{
byte[] arrData = Encoding.UTF8.GetBytes(data);
request.ContentLength = arrData.Length;
using (Stream oS = request.GetRequestStream())
{
oS.Write(arrData, 0, arrData.Length);
}
}
else
{
request.ContentLength = 0;
}
//((HttpWebRequest)request). // <= should this call "GetRequestStream())" or
"BeginGetResponse" or "GetResponse" or "RequestUri" or ... ???
}
catch (Exception ex)
{
String msgInnerExAndStackTrace = String.Format(
"{0}; Inner Ex: {1}; Stack Trace: {2}", ex.Message, ex.InnerException,
ex.StackTrace);
ExceptionLoggingService.Instance.WriteLog(String.Format("From
FileXferREST.SendHTTPRequestNoCredentials(): {0}", msgInnerExAndStackTrace));
}
return request as HttpWebRequest;
}
即使 http 类型是"Get",也不应该显式"发送"HttpWebRequest 吗?我是否需要在上面注释掉的行中添加一些内容,或者我需要更改此部分:
if (method != HttpMethods.GET && method != HttpMethods.DELETE)
{
byte[] arrData = Encoding.UTF8.GetBytes(data);
request.ContentLength = arrData.Length;
using (Stream oS = request.GetRequestStream())
{
oS.Write(arrData, 0, arrData.Length);
}
}
else
{
request.ContentLength = 0;
}
。对此:
byte[] arrData = null;
if (method != HttpMethods.GET && method != HttpMethods.DELETE)
{
arrData = Encoding.UTF8.GetBytes(data);
request.ContentLength = arrData.Length;
}
else
{
request.ContentLength = 0;
}
using (Stream oS = request.GetRequestStream())
{
oS.Write(arrData, 0, arrData.Length);
}
。否则,当http方法== GET时,实际上如何调用REST方法???
更新
或者重构真的应该是这样的:
public static HttpWebResponse SendHTTPRequestNoCredentials(string uri, HttpMethods method,
string data, string contentType)
{
. . .
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
return response;
}
(IOW,将返回类型从 HttpWebRequest 更改为 HttpWebResponse,并将上面显示的这两行附加到方法的末尾)?
该方法设置在request.Method = Enum.ToObject(typeof(HttpMethods), method).ToString();
行中,因此代码片段看起来不错。呼叫请求。GetResponse() 或请求。BeginGetResponse() 来执行该操作。