我進入一個場景,我的代碼是用HttpWebRequest/HttpWebResponse(System.Net)編寫的。這是在.Net4.5.2上。 但是爲了平臺獨立的原因,我正在將我的代碼遷移到NetStandard。出於某種原因,我在NetStandard 1.6(尚未嘗試2.0)。哪一個選擇HttpRequestMessage(HttpClient)或HttpWebRequest?
問題:狀態碼403(禁止)的響應。
原始代碼:
var request = WebRequest.Create("url") as HttpWebRequest;
/*
. adding headers/ filling content
.
*/
var req = request as WebRequest;
try{
req.GetResponse();
}catch(WebException ex){
}
該代碼使用捕捉響應與作爲網絡異常403(禁止)狀態。但是有了這個新的代碼。
我可以使用2遷移代碼來NetStandard 1.6接近
Approach 1: //System.Net.Http
var request = new HttpRequestMessage();
/*
. adding headers/ filling content/method
.
*/
var client = new HttpClient();
//client.credentials = credentials //credentials if required
try{
client.SendAsync(request).Result;
}catch(exception ex){
}
這裏響應與403種狀態(禁止)將不會是一個例外了。這只是迴應。所以這是我的代碼的新行爲/將不適合。
方法2:使用System.Net.Requests - NuGet包。 4.3.0
var request = WebRequest.Create("url") as HttpWebRequest;
/*
. adding headers/ filling content
.
*/
var req = request as WebRequest;
try{
req.GetResponseAsync().Result;
}catch(AggregateException ex){
var webEx = ex.InnerExceptions[0] as WebException;
//To get my previous behavior back/retrofit
}
這是作爲我的原始代碼唯一的事情是同步API不可用。我需要使用WebRequest.GetResponseAsync()進行管理。結果爲403響應拋出聚合異常。一些額外的工作來改造。
所以現在我不能斷定哪一個使用。 有人請幫忙選擇HttpRquestMessage(HttpClient)或HttpWebRequest,並說明原因。
在此先感謝