我使用下面的代碼發佈到一個網站,但我得到一個411錯誤,( The remote server returned an error: (411) Length Required
)。發送一個異步的WebRequest後,我得到了(411)需要長度
這是我正在使用的函數,我只是刪除了異常處理。我得到了一個WebException
被拋出。
private static async Task<string> PostAsync(string url, string queryString, Dictionary<string, string> headers)
{
var webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.Method = "POST";
if (headers != null)
{
foreach (var header in headers)
{
webRequest.Headers.Add(header.Key, header.Value);
}
}
if (!string.IsNullOrEmpty(queryString))
{
queryString = BuildQueryString(query);
using (var writer = new StreamWriter(webRequest.GetRequestStream()))
{
writer.Write(queryString);
}
}
//Make the request
try
{
using (
var webResponse = await Task<WebResponse>.Factory.FromAsync(webRequest.BeginGetResponse, webRequest.EndGetResponse, webRequest).ConfigureAwait(false))
{
using (var str = webResponse.GetResponseStream())
{
if (str != null)
{
using (var sr = new StreamReader(str))
{
return sr.ReadToEnd();
}
}
return null;
}
}
}
catch (WebException wex)
{
// handle webexception
}
catch (Exception ex)
{
// handle webexception
}
}
我看到一些網站上,加入
webRequest.ContentLength = 0;
會的工作,但在某些情況下,我得到錯誤的長度是錯誤的,(因此它必須是0以外的東西)。
所以我的問題是,如何正確設置內容長度?
而且,我是否正確地發送我的post
請求?有另一種方法嗎?
不確定它是否重要,但我使用的是.NET 4.6,(但如果需要,我可以使用4.6.1)。
我認爲可能還有更多,如果我做出你所建議的改變,我現在得到「System.Net.ProtocolViolationException:要寫入流的字節超過指定的Content-Length字節大小。」,我需要在內容長度中包含標題長度?我會看看HttpClient,這是'優先'的方式嗎? –
然後可能是字節與字符長度不匹配。 'HttpClient'是現在的首選方式。在後面,它僅僅是'HttpWebRequest'的包裝,但使用更簡單。這裏有一個解釋:http://www.diogonunes。COM /博客/ Web客戶端-VS-HttpClient的-VS-的HttpWebRequest / –