6

我正在开发 .Net Web API,它在调试和本地主机 IIS 上都可以正常工作,但是当我将它发布到服务器时,它开始给出以下错误:-
“消息”:“没有找到与请求 URI 匹配的 HTTP 资源

在服务器上,我们在此 API 的默认站点下有应用程序文件夹,但它在本地 IIS 的默认站点下的应用程序文件夹中工作正常,所以这应该不是问题。

现在我尝试在处理程序中设置正确的动词,如以下 url 中指定但没有工作:
HTTP 404 Page Not Found in Web Api Hosted in IIS 7.5

我还按照以下网址的建议在服务器上安装了 MVC4:
.NET Web Api - 404 - File or directory not found

WebDav 模块,处理程序也可能会出错,所以我也尝试删除它,但它给出了同样的错误。

这是模块、处理程序设置的 Web.config 部分:-

<modules runAllManagedModulesForAllRequests="true" />
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="*" modules="IsapiModule" 
       scriptProcessor="%windir%\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="*" modules="IsapiModule" 
       scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" 
       preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

我不在任何地方玩路线。我是否缺少有关 web.config 或服务器 IIS 中的设置/配置的内容?

4

3 回答 3

1

造成这种情况的另一个潜在原因是,如果

    GlobalConfiguration.Configure(WebApiConfig.Register);

在之后

    RouteConfig.RegisterRoutes(RouteTable.Routes);

在 global.asax.cs

它需要在之前,否则默认的 RouteConfig 路由会“吃掉”WebAPI 路由 - 并尝试将 API 请求映射到名为 API 的控制器......

于 2014-09-12T17:08:33.653 回答
1

这对我有用:

<remove name="WebDAV"/>

我不知道为什么它安装在服务器上。但这似乎与无扩展处理程序有干扰

从 IIS(http://www.iis.net/learn/install/installing-publishing-technologies/installing-and-configuring-webdav-on-iis):

Microsoft 发布了一个新的 WebDAV 扩展模块,该模块针对 Windows Server® 2008 上的 Internet 信息服务 (IIS) 7 及更高版本完全重写。这个新的 WebDAV 扩展模块包含许多新功能,使 Web 作者能够比以前更好地发布内容,并提供 Web管理员更多的安全和配置选项。Microsoft 已发布针对 Windows Server® 2008 的 WebDAV 扩展模块的更新,该模块提供共享和独占锁支持以防止由于覆盖而丢失更新。

于 2013-10-03T01:20:40.870 回答
0

改成:

<validation validateIntegratedModeConfiguration="false" />
<modules>
  <remove name="WebDAVModule"/>
</modules>
<handlers>
  <remove name="WebDAV"/>
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\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="%windir%\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" />
</handlers>
于 2013-08-07T12:51:26.873 回答