【问题标题】:Is it possible to hardcode response in web api?是否可以在 web api 中对响应进行硬编码?
【发布时间】:2019-11-18 02:16:02
【问题描述】:

我需要每 5 分钟调用一次 Web 服务来判断系统是否停机。问题是如果服务器关闭,系统不会调用控制器。我们正在使用属性路由。如果服务器关闭,我需要创建一个硬编码响应,但由于它没有发送到控制器,我无法对响应进行硬编码。

出现异常如何调用控制器。

【问题讨论】:

  • 你现在可能已经明白了,如果服务器宕机了,你不能依赖服务器来告诉你它是否宕机。相反,请调用您的 Web 服务,如果它没有响应,则它已关闭。
  • @RobertHarvey 返回异常。但我不想返回响应,而是想返回一个硬编码的 json 响应。当我使用属性路由时,这可以在控制器上执行吗?
  • 在你的真实服务前面使用一个单独的代理,将请求转发给它,但在真实服务没有响应时返回你想要的错误响应?也就是说,这是一件很奇怪的事情,编写良好的服务客户端应该能够自行检测服务是否关闭,而无需期待特定的响应
  • 如果服务器宕机了,你到底要如何从中返回任何东西?
  • @AndreiDragotoniu 是的,但是规范说当它无法联系服务器时我需要返回硬编码的 json 响应

标签: c# asp.net-web-api attributerouting


【解决方案1】:

A.如果系统关闭,则无法生成响应。但这是一件好事,否则您将无法检测到它是否已关闭。

B.如果出现异常,客户端仍会收到响应(例如 500),告诉它服务器已启动(但有问题)。

C.在控制器级别,我认为这是你能做的最好的:

[Route("/alive")]
[AllowAnonymous]
[HttpGet]
public string Alive()
{
   return "I'm alive and loving it!";
}

D.要为错误设置自定义错误响应,请参阅Global Error Handling in ASP.NET Web API 2 或Exception Handling in ASP.NET Web API 的异常过滤器:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Filters.Add(new ProductStore.NotImplExceptionFilterAttribute());

        // Other configuration code...
    }
}

【讨论】:

  • 服务器宕机,无法找到路由,无法进入控制器。
  • 您将不得不定义“找不到路线”的含义。如果您的路由定义不起作用,那么声称您的服务器处于活动状态有什么意义?或者这真的是关于处理服务器错误的 javascript / httpclient 问题吗?
猜你喜欢
  • 1970-01-01
  • 2016-04-07
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多