首页 > 解决方案 > 更新 API 后 IIS 上出现错误 404

问题描述

所以我有一个具有这种结构的 API:

[RoutePrefix("api/AppMananciais")]
public class AppMananciaisController : ApiController
{
   // GET api/<controller>
   [AcceptVerbs("Get")]
   [Route("DadoDia/{_data}")]
   public object DadoDia(DateTime _data)
   {
       /*some code*/
   }

我以前是这样叫的? http://myurl.com/api/AppMananciais/DadoDia/2018-01-01

然后,我们为其开发了一个更新,并为 API 版本添加了一个可选参数

// GET api/<controller>
[AcceptVerbs("Get")]
[Route("DadoDia/{_data}/{api_version?}")]
public object DadoDia(DateTime _data, int api_version = 1)
{
    /*some code*/
}

所以这两个调用都应该起作用:

http://myurl.com/api/AppMananciais/DadoDia/2018-01-01 http://myurl.com/api/AppMananciais/DadoDia/2018-01-01/2

我们在 Visual Studio 上进行本地测试,然后在开发服务器、测试服务器和验收测试服务器上发布,在所有这些服务器上都按预期工作。

当我们最终发布到生产服务器时,它并没有按预期工作。调用 API 的旧方法运行良好

http://myurl.com/api/AppMananciais/DadoDia/2018-01-01

从结果中我们可以看出它确实在运行更新版本。

但是调用 API 的新方法返回错误 404 http://myurl.com/api/AppMananciais/DadoDia/2018-01-01/2

所有服务器都运行相同版本的 IIS (8.5.9600.16384)

它们的 Web.config 是相同的,除了指示从何处获取数据的键/值对。测试表明数据源工作正常,并通过 api 版本参数理解新语法。

<configuration>
  <system.web>
    <compilation targetFramework="4.6" />
    <httpRuntime targetFramework="4.6" />
  </system.web>
  <system.webServer>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
  <appSettings>
    <add key="apiIntranet" value="http://datasource:1059/" />
  </appSettings>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
  </configuration>

经过一番研究,我尝试在 Web.config 中包含以下行,但没有解决问题:

<modules runAllManagedModulesForAllRequests="true" />

关于我应该寻找什么以使 API 按预期工作并在测试的所有其他服务器中验证的任何提示?

标签: asp.netweb-servicesiis

解决方案


推荐阅读