我正在尋找C#HTTP客戶端,它不會拋出,當它得到一個HTTP錯誤(404例如)。 這不僅僅是一個風格問題;它完全有效的非2xx答覆有一個身體,但我不能得到它,如果HTTP堆棧拋出時做一個GetResponse()http客戶端,不會拋出錯誤
1
A
回答
3
所有返回Task<HttpResponseMessage>
的System.Net.Http.HTTPClient
方法不是扔在任何HttpStatusCode上。他們只會拋出超時,取消或無法連接到網關。
0
實現一個包裝HttpClient的類是什麼?
讓它實現委託給客戶端對象的所需方法,並嘗試/捕獲這些委託方法中的例外。
class MyClient
{
HttpClient client;
[...]
public String WrappedMethodA()
{
try {
return client.MethodA();
} catch(Exception x) {
return ""; // or do some other stuff.
}
}
}
實施自己的客戶端後,您將擺脫這些例外。
如果你需要一個HttpClient的實例,從HttpClient的繼承和重寫它的方法是這樣的:
public String WrappedMethodA()
{
try {
return base.MethodA(); // using 'base' as the client object.
} catch(Exception x) {
return ""; // or do some other stuff.
}
}
2
如果您使用的是System.Net.Http HttpClient的,你可以做這樣的事情:
using (var client = new HttpClient())
using (var response = await client.SendAsync(request))
{
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadAsStreamAsync();
// You can do whatever you want with the resulting stream, or you can ReadAsStringAsync, or just remove "Async" to use the blocking methods.
}
else
{
var statusCode = response.StatusCode;
// You can do some stuff with the status code to decide what to do.
}
}
由於在HttpClient的幾乎所有方法都是線程安全的,我建議你真正創建一個靜態的客戶端代碼中的其他地方使用,你是不是浪費內存的方式,如果你賺了很多的請求通過不斷創造摧毀客戶只有一個請求時埃可以做成千上萬。
相關問題
- 1. Apache的HTTP客戶端POST拋出500
- 2. Angular http客戶端錯誤
- 3. 是拋出內存不足的錯誤回客戶端
- 4. RestEasy的客戶端拋出拋出java.lang.ClassNotFoundException:com.sun.ws.rs.ext.RuntimeDelegateImpl
- 5. 爲什麼此Exredis客戶端不會在on_exit回調中拋出錯誤?
- 6. 彈性搜索拋出客戶端客戶端搜索錯誤響應
- 7. Jmx客戶端拋出InstanceNotFoundException
- 8. 很簡單的Node.js客戶端拋出錯誤ENOBUFS的HTTP請求
- 9. 如何從服務器端拋出錯誤並從客戶端捕獲錯誤?
- 10. Spring WS客戶端處理HTTP錯誤
- 11. HTTP客戶端PUT請求錯誤
- 12. 錯誤提取HTTP頭SOAP客戶端
- 13. Node.io不會拋出錯誤?
- 14. Git的客戶拋出錯誤
- 15. 從某些客戶端訪問時,wcf拋出錯誤
- 16. Google Admin SDK拋出錯誤的請求java客戶端
- 17. Python Zeep客戶端請求在xml異常中拋出錯誤
- 18. Twilio可編程語音客戶端拋出31000錯誤
- 19. PHP SOAP客戶端拋出錯誤,而貝寶
- 20. 肥皂客戶端不會拋出異常
- 21. 澤西島/ JAX-RS客戶端在HTTP上拋出異常GET
- 22. 如何模擬Jersey REST客戶端拋出HTTP 500響應?
- 23. 乘客不斷拋出連接錯誤
- 24. RMI程序:客戶端發出錯誤
- 25. 使用KSoap2的Web服務客戶端 - 不迴應或拋出錯誤
- 26. Select()不會出現在客戶端
- 27. SpanButton客戶端屬性拋出NullPointerException
- 28. Kinesis Firehose客戶端putRecord拋出UnknownOperationException
- 29. 蜂巢JDBC客戶端拋出的SQLException
- 30. JavaScript SOAP客戶端拋出Uncaught TypeError
你可以得到的迴應 http://stackoverflow.com/questions/692342/net-httpwebrequest-getresponse-raises-exception-when-http-status-code-400-ba HTTP ://stackoverflow.com/questions/18403846/httpwebrequest-accept-500-internal-server-error – CaldasGSM
@ CaldasGSM - 啊哈 - 我沒有意識到 - ty – pm100