使用 HttpWebRequest 類作 POST 請求沒有應反

這幾天給系統作第三方集成, 須要調用另外一個軟件的一個接口, 經過 HTTP 的方式調用,調用代碼也挺簡單的:json

 

string serviceUrl = string.Format("{0}/{1}", this.BaseUrl, path);
HttpWebRequest request = null;
Stream reqStream = null;
request = (System.Net.HttpWebRequest)WebRequest.Create(serviceUrl);
request.Method = "POST";
request.Accept = "*/*";
request.ContentType = "application/json;charset=UTF-8";

byte[] postData = Encoding.UTF8.GetBytes(param); 
reqStream = request.GetRequestStream();
reqStream.Write(postData, 0, postData.Length);
using (var response = (HttpWebResponse)request.GetResponse())
{
    Stream myResponseStream = response.GetResponseStream();
    StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("UTF-8"));
    string retString = myStreamReader.ReadToEnd();
    myStreamReader.Close();
    myResponseStream.Close();
    return retString;
}

 

代碼也沒有什麼特別的,可是當代碼執行到  request.GetResponse() 時,程序是不報錯, 也不往下執行了,就一直卡在這裏,服務器端也沒有接收到請求(服務端是沒有問題的),找了一上午,各類屬性都設置了一遍,都沒有效果,最後忽然想到好像少了給 request 設置一個 ContentLength 屬性, 立刻加上 request.ContentLength = postData.Length, 再測試就行了。服務器

 

這個問題找這麼久, 是由於剛開始在我本地作測試的時候是沒有問題, 一切都正常, 部署到服務器上後發現調用不通, 因此剛開始覺得是服務器這邊有什麼端口限制什麼的,因此一直在叫服務器管理人員查網絡設置,後來爲了測試方便,在本地建立了一個 WINFORM 程序來測試,發如今 WINFORM 程序裏測試的時候也不行了,再運行以前的寫的測試程序,又能夠, 比較了一下兩個 .NET 版本,以前使用的是 .NET FRAMEWORK 4.7, WINFORM 使用的是 .NET FRAMEWORK 3.5。網絡

 

在 .net framework 4.7 應該對這個屬性作了處理, 可是在 3.5 裏, 沒有這個屬性, 就沒有任何反應,這個也太坑了點, 拋出一個異常也好啊!app

相關文章
相關標籤/搜索