我在Web API无法执行动作时发送什么响应,因为第三方服务

17 浏览
0 Comments

我在Web API无法执行动作时发送什么响应,因为第三方服务

我正在开发一个使用Dotnet Core编写的C# Web API。我在尝试从另一个服务器上的第三方服务中获取数据时遇到了返回结果的问题。如果在尝试获取数据时出现问题,根据我查看的规范,对应的HTTP响应状态码应该是502 Bad Gateway,因为:\n

\n服务器在充当网关或代理时,从上游服务器接收到无效的响应,无法完成请求。\n

\n但是我找不到一种在我的行为中返回这个状态码的方法。看起来IActionResult没有对这个状态码的实现。我对此考虑得正确吗?

0
0 Comments

当我的Web API由于第三方服务的原因无法执行某个操作时,我应该发送什么响应?

Web API中包含一些快捷方法,你在可能的情况下应该使用它们,但它们只针对一些常见的错误代码提供了一些方法。

以下代码将只返回StatusCode:

return StatusCode(HttpStatusCode.BadGateway);

最常见的返回如下:

return NotFound() // 404
return Ok() //200
return InternalServerError() //500

你应该问自己的是,是否绝对需要返回准确的错误代码。你的前端是否需要知道这些?如果你已经在API中处理了异常的日志记录,那么你可能应该返回一些更通用的错误代码,比如InternalServerError()

如果一切顺利,我打算返回一组信息。有没有一种常见的返回类型,可以让我发送Bad Gateway状态码或类似于ObjectResult的东西?

我不太确定你在这里问的是什么。我上面发布的return StatusCode(HttpStatusCode.BadGateway);将返回你所需的状态码。

考虑在API调用失败时返回JSon对象。当发生故障时,构建您的自定义对象,并在从API响应之前序列化。请参考stackoverflow.com/questions/22607031/…

我理解了你的答案,很有道理。我的问题是,是否有一种常见的类型可以让我返回这个状态码,就像你给出的一个示例,当方法的控制流由于错误而发生时,或者返回我从第三方服务成功检索到的集合的ObjectResult

我道歉。IActionResult的确是两者都实现的接口。我错误地认为我得到一个错误,因为我的方法的返回类型,但实际上我必须将枚举转换为整数。StatusCode接受一个整数,我没有看到接受HttpStatusCode枚举作为参数的扩展方法或其他内容。谢谢!

你不得不进行强制转换真是奇怪。你使用的是哪个IDE?

- Visual Studio 2017. 我也觉得很奇怪。但是Resharper对此并不满意,哈哈。

0