- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的代码是用 HttpWebRequest/HttpWebResponse (System.Net) 编写的。这是在.Net4.5.2上。但是出于平台独立性的原因,我正在将我的代码迁移到 NetStandard。出于某种原因,我使用的是 NetStandard 1.6(尚未尝试 2.0)。
问题:状态代码为 403(禁止访问)的响应。
原代码:
var request = WebRequest.Create("url") as HttpWebRequest;
/*
. adding headers/ filling content
.
*/
var req = request as WebRequest;
try{
req.GetResponse();
}catch(WebException ex){
}
此代码用于捕获具有 403(禁止)状态的响应作为 Web 异常。但是有了这个新代码。
我可以使用两种方法将代码迁移到 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 状态(禁止)的响应将不再是异常(exception)。这只是回应。所以这是我的代码的新行为/不会复古。
方法 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().Result 进行管理,这会引发 403 响应的聚合异常。几乎没有额外的改造工作。
所以现在我无法决定使用哪一个。请有人帮忙选择 HttpRquestMessage(HttpClient) 或 HttpWebRequest,并说明原因。
提前致谢
最佳答案
使用第一种方法,您可以通过处理响应使其行为相似。你可以这样做:
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 错误。
关于c# - HttpRequestMessage(HttpClient) 和 HttpWebRequest 选哪个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46679908/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!