0
我正在使用节俭HttpClient(C#)向我设置的Web服务器发出Web请求,如果该服务器返回200以外的内容(或202我想象),我的请求会抛出TTransport异常。如何从TTransport异常中获取HTTP状态码?
我想根据返回的特定状态码来回应这个异常,但是我没有看到任何在异常界面中公开状态码的东西。我错过了什么吗?我知道异常消息包含状态码,但我宁愿不必解析该消息以获取状态码。
我正在使用节俭HttpClient(C#)向我设置的Web服务器发出Web请求,如果该服务器返回200以外的内容(或202我想象),我的请求会抛出TTransport异常。如何从TTransport异常中获取HTTP状态码?
我想根据返回的特定状态码来回应这个异常,但是我没有看到任何在异常界面中公开状态码的东西。我错过了什么吗?我知道异常消息包含状态码,但我宁愿不必解析该消息以获取状态码。
如果服务器遇到处理错误,推荐的方法不是抛出一个HTTP 500.相反,服务器应该通过例外的方式发送这个信号。考虑以下节俭IDL:
exception MyProcessingError
{
1: string reason
2: string errorDetails
3: string recommendedAction
}
service FooBar {
void ProcessPayments(1: double amount; 2: string receiver)
throws (1: MyProcessingError mpe)
}
与args和struct字段类似,可以声明多个异常类型。客户端可以捕获这些异常和往常一样:
try
{
client.ProcessPayments(47.11, "Dagobert");
}
catch (MyProcessingError e)
{
// process exception
}
备注
oneway
调用永远不会返回任何值,因此也不会有例外 异常。
这是一个有趣的问题。典型的用例是抽象出底层传输的细节,以便使它(或更好:保持它)可以互换。这就是为什么所有肮脏的细节都是通过更抽象的TTransportException概念返回的。请问你问题背后的目的是什么,你想要达到什么目的? – JensG
如果我收到404错误,我希望我的应用程序报告服务器关闭的用户,并且在服务器备份之前,应用程序的所有功能都不会起作用。如果是500错误,我想报告服务器在处理刚发布的特定命令时遇到问题。 我不需要在我向用户显示的消息中详细说明,并且错误日志包含状态码,因为我在那里输出异常消息,所以我可以忍受这种状态。我刚刚认为HTTPClient可能具有特定于其执行TTransport的属性 – BobbyA
您是否尝试过检查'TransportException'的'Type'字段?如果是404,则设置为'EndOfFile'。如果发生其他错误,我会得到不同的错误,例如'未知'或甚至'TProtocolException',这取决于我使用的协议。最后的手段是检查一些关键字的消息文本,但这有点难看。以上任何解决方案是否会解决问题? – JensG