0

我正在使用节俭的 HttpClient (C#) 向我设置的 Web 服务器发出 Web 请求,如果该服务器返回 200 以外的值(或我想象的 202),我的请求会引发 TTransport 异常。

我想根据返回的特定状态码来响应这个异常,但是我没有看到任何在异常界面中暴露状态码的东西。我错过了什么吗?我知道异常消息包含状态代码,但我宁愿不必解析该消息来获取状态代码。

4

1 回答 1

1

如果服务器遇到处理错误,推荐的方法不是抛出 HTTP 500。相反,服务器应该通过异常发出信号。考虑以下 Thrift 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
}

评论

  • 服务器只能抛出在 IDL 中为特定调用声明的异常。
  • 此外,oneway调用从不返回任何值,因此也不例外。
于 2013-11-04T22:40:34.903 回答