2017-10-11 73 views
2

我进入一个场景,我的代码是用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,并说明原因。

在此先感谢

回答

1

使用第一种方法,你可以把它用行动处理响应类似。你可以这样做:

var request = new HttpRequestMessage(); 
/* 
. adding headers/ filling content/method 
. 
*/ 

var client = new HttpClient(); 
//client.credentials = credentials //credentials if required 
try 
{ 
    var result = client.SendAsync(request).Result; 
    result.EnsureSuccessStatusCode(); // throws if not success 
} 
catch(Exception ex) 
{ 
    // handle exception here 
} 

这可能是接近你会得到同样的方式行事代码,而不必通过内部异常挖掘,以确定它是否是一个HTTP错误与否。

相关问题