更新API

时间:2018-06-15 03:28:11

标签: asp.net web-services iis

所以我有一个这种结构的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 version参数了解新语法。

<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按预期工作并在其测试的每个其他服务器中验证,我应该寻找其他什么提示?

0 个答案:

没有答案