Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从TTTransport异常中获取HTTP状态代码?_C#_Thrift - Fatal编程技术网

C# 如何从TTTransport异常中获取HTTP状态代码?

C# 如何从TTTransport异常中获取HTTP状态代码?,c#,thrift,C#,Thrift,我正在使用thrift HttpClient(C#)向我设置的web服务器发出web请求,如果该服务器返回的不是200(或我想象的202),我的请求将抛出TTTransport异常 我希望根据返回的特定状态代码响应此异常,但我没有看到任何在异常接口中公开状态代码的内容。我错过什么了吗?我知道异常消息包含状态代码,但我不想解析该消息来获取状态代码 如果服务器遇到处理错误,建议不要抛出HTTP 500。相反,服务器应该通过异常发出信号。考虑以下节俭IDL: exception MyProcessin

我正在使用thrift HttpClient(C#)向我设置的web服务器发出web请求,如果该服务器返回的不是200(或我想象的202),我的请求将抛出TTTransport异常


我希望根据返回的特定状态代码响应此异常,但我没有看到任何在异常接口中公开状态代码的内容。我错过什么了吗?我知道异常消息包含状态代码,但我不想解析该消息来获取状态代码

如果服务器遇到处理错误,建议不要抛出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
}
备注

  • 服务器只能抛出在IDL中声明的异常 特别的电话
  • 此外,
    one-way
    调用从不返回任何值,因此 也有例外

这是一个有趣的问题。典型的用例是抽象出底层传输的细节,以便使它(或者更好:保持它)可互换。这就是为什么所有肮脏的细节都是通过更抽象的TTTransportException概念返回的。我可以问一下你的问题背后的目的是什么,你到底想要实现什么?如果我遇到404错误,我希望我的应用程序向用户报告服务器已关闭,并且在服务器备份之前,应用程序的任何功能都不会工作。如果是500错误,我想报告服务器在处理刚刚发出的特定命令时出现问题。我不需要在向用户显示的消息中如此详细,错误日志包含状态代码,因为我正在那里输出异常消息,因此,我可以接受这种情况。我刚才认为HTTPClient可能具有特定于其TTransport实现的属性。您是否尝试检查了
TransportException
类型
字段?如果是404,则设置为
EndOfFile
。如果出现其他错误,我会收到不同的错误,例如
未知
甚至
t协议异常
,具体取决于我使用的协议。最后的办法是检查消息文本中的一些关键字,但这有点难看。上述任何一项都能解决问题吗?检查Endofile是否能推断出404,这是我未来版本节俭的依据吗?我不相信这一点,因为导致传输介质损坏的确切原因可能有多种原因。它不一定是404条件,但当使用HTTP传输时,它可以指示404的某种可能性。