生产服务器中调用API时出现404错误

时间:2019-02-13 10:12:53

标签: asp.net asp.net-web-api routes asp.net-web-api2

我有一个Web应用程序,其中已将Web API集成到其中。创建了Route,并在从本地主机调用时起作用。

当它移到生产服务器时,它可以工作。但是,当添加SSL证书并修改了web.config以重定向到HTTPS时,We​​b API将在服务器中停止工作。

它抛出404-找不到文件或目录。

API控制器:

[Route("api/dashboard/{id}")]
[HttpGet]
public DataTable getDashboardDetails(int ID)
{
}

使用的Web.config HTTPS方法:

<rewrite>
      <rules>
        <rule name="HTTP to HTTPS redirect" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
            <add input="{HTTPS}" pattern="off" ignoreCase="true" />
            <add input="{HTTP_HOST}" matchType="Pattern" pattern="^localhost(:\d+)?$" negate="true" />
          </conditions>
          <action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
      </rules>
</rewrite>

Web.config-> WebServer:

<validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="WebDAVModule" />
      <remove name="UrlRoutingModule-4.0" />
      <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler,runtimeVersionv4.0" />
    </modules>
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />

      <remove name="WebDAV" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />

      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="C:\windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="C:\windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

    <add name="ApiURIs-ISAPI-Integrated-4.0"
     path="/people/*"
     verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS"
     type="System.Web.Handlers.TransferRequestHandler"
     preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

WebApiConfig.cs

            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

RouteConfig.cs

routes.IgnoreRoute("api/{*pathInfo}");

Global.ascx.cs

            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

      GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true;

还尝试从web.config文件中删除https数据,但会引发404错误。 请帮助使api也能在服务器上工作。

谢谢。

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。该错误是由于重命名该项目。

这是另一种可能遇到此错误的情况。如果我们重命名项目以使程序集的文件名更改,则可能有两个版本的ASP.NET程序集会重现此错误。

解决方案是转到bin文件夹并删除旧的dll。 (我尝试过“重建项目”,但是并没有删除'em,因此请务必检查bin以确保它们消失了)