REST API服务返回500错误,实际上是404。通过调用服务的IP地址,可以正常工作

时间:2018-08-18 15:09:52

标签: azure asp.net-web-api2 azure-web-sites iis-8.5 arr

我们在我们的一个API服务应用程序(ASP.NET WEB API 2)中面临与服务器相关的问题。当我们通过站点域名(api.xxx.com)访问该服务时,该服务将返回内部服务器错误(500)。但是,如果我们通过站点IP地址(11.111.11.111)访问相同的服务,则它将返回正确的结果(404)。仅当服务器尝试返回404时,才会发生此问题。

  1. https://api.xxx.com/api/Test/getEmployee/1 [返回500错误]
  2. https://111.11.111.11/api/Test/getEmployee/1 [获得了预期的结果(404)]

enter image description here enter image description here

对于具有数据的相同API服务和不同参数,它可以正常工作。

我们已经检查了代码端,没有记录错误。

示例代码:

    public IHttpActionResult GetEmployee(int employeeId)
    {
        try
        {                
                var employee = employeeManager.GetEmployee(employeeId);
                if (employee != null)
                {
                    return Ok(employee);
                }                              
        }
        catch (Exception ex)
        {
            Logger.Error("Error occured in GetEmployee: " + ex);
        }
        return NotFound();
    }

我们将站点托管在Azure服务器中。

域名托管/负载均衡器/ ARR服务器是否存在任何问题。

请帮助我们解决此问题。

先谢谢了。

1 个答案:

答案 0 :(得分:0)

假设使用Azure应用服务,因为您没有清楚地声明它,并且标签几乎没有造成混淆。

您被该404误导了。404由ARR返回,而不是由您的API返回。发生这种情况是因为您的请求需要一个Host: domain.com,就像Netscape时代一样,您不能仅以HTTP / 1.0的方式进入您的网站。

您要访问的公共IP是整个App Service标记(请考虑成千上万的租户/应用程序),Host标头可帮助将请求路由到您的 API。

坏消息是您的API返回HTTP 500,但是您可以调试它,启用日志记录,通过web.config禁用自定义错误(这样您就可以看到堆栈跟踪)并打开失败的请求跟踪。