ASP.NET Web API应用程序在IIS 7上部署时提供了404

我有一个ASP.NET Web API,在localhost:1783上运行“IIS Express”时可以正常工作

VS中的设置

但是,当我解开“使用IIS Express”,然后按“创build虚拟目录”…

新的设置

…我只是得到404错误: 404错误

任何想法什么是错的? 谢谢!

虽然标记的答案得到它的工作,所有你真的需要添加到webconfig是:

<handlers> <!-- Your other remove tags--> <remove name="UrlRoutingModule-4.0"/> <!-- Your other add tags--> <add name="UrlRoutingModule-4.0" path="*" verb="*" type="System.Web.Routing.UrlRoutingModule" preCondition=""/> </handlers> 

请注意,这些都没有特定的顺序,但您希望在添加之前移除。

我们最终得到一个404的原因是因为Url路由模块只在IIS中启动网站的根目录。 通过将模块添加到此应用程序的configuration中,我们让模块在此应用程序的path(您的子目录path)下运行,并且路由模块启动。

对于我来说,除了runAllManagedModulesForAllRequests="true"我还必须编辑下面的"path"属性。 以前我的path属性是"*." 这意味着它只能在包含点字符的url上执行。 但是,我的应用程序的url不包含点。 当我切换到"*"path,然后它的工作。 这是我现在拥有的:

  <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <modules runAllManagedModulesForAllRequests="true"> <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="*" 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> </system.webServer> 

您可能需要安装修补程序KB980368 。

本文介绍了一个更新,使某些Internet信息服务(IIS)7.0或IIS 7.5处理程序来处理请求的URL不以句点结束。 具体来说,这些处理程序映射到“ 。” 请求path。 目前,映射到“ 。” 的处理程序 请求path只处理URL以句点结尾的请求。 例如,处理程序只处理其URL类似于以下URL的请求:

http://www.example.com/ExampleSite/ExampleFile

应用此更新之后,映射到“*”的处理程序。 请求path可以处理URL以句号结尾的请求,以及URL不以句号结尾的请求。 例如,处理程序现在可以处理类似以下URL的请求:

http://www.example.com/ExampleSite/ExampleFile

http://www.example.com/ExampleSite/ExampleFile

应用此修补程序后,ASP.NET 4应用程序可以处理对无扩展名URL的请求。 因此,在处理程序执行之前运行的托pipe的HttpModule将运行。 在某些情况下,HttpModules可以为无扩展名的URL返回错误。 例如,编写的仅用于预期.aspx请求的HttpModule现在可能会在尝试访问HttpContext.Session属性时返回错误。

由于以下原因,也可能发生此问题

1.在Web.Config中

 <system.webServer> <modules runAllManagedModulesForAllRequests="true" /> </system.webServer> 

2.确保部署Web API的服务器上的bin文件夹中具有以下内容

•System.Net.Http

•System.Net.Http.Formatting

•System.Web.Http.WebHost

•System.Web.Http

如果通过Visual Studio进行发布,这些程序集将不会被复制到bin文件夹中,因为Web API软件包是通过开发机器中的Nuget安装的。 如果您想要将这些文件作为Visual Studio发布的一部分提供,那么您需要将CopyLocal设置为True以用于这些assembly

有人说runAllManagedModulesForAllRequests =“true”会有性能问题和MVC路由问题。 他们build议使用以下内容:

http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html

http://bartwullems.blogspot.com/2012/06/optimize-performance-of-your-web.html

我有同样的问题。 很多研发我发现这个问题。

但只要你的configuration是芬恩意味着ASPNET 64位和IIS那么我看到的唯一的问题是path“web api采取本地directivitypath”,以便您需要狂热它。 通过这样..〜../../../ api / products /

非常感谢您发布该问题。 我倚靠在configuration文件中的其他设置。

我正在使用Visual Studio 2012,下载并安装Microsoft最近发布的Update 2(截至2013年4月)。

Visual Studio 2012更新2

与该问题相关的更新中有一些错误修复。

我一直在努力解决这个问题几天,尝试各种build议。 我的开发机器工作正常,但我正在部署的新机器给我的404错误。

在IISpipe理器中,我比较了两台机器上的处理程序映射,意识到很多处理程序都丢失了。 原来,ASP.Net 5没有安装在机器上。

对于我来说,这个问题与其他答案略有不同,因为我只在OPTIONS上收到404,但是我已经在我的集成无扩展URL处理程序选项中明确指出了选项。 很混乱。

  1. 正如其他人所说,模块节点中的runAllManagedModulesForAllRequests =“true”是覆盖修复大多数Web API 404问题的简单方法 – 尽pipe我更喜欢@DavidAndroidDev的答案,这种方法不那么具有侵入性。 但是我的情况还有一些额外的东西。
  2. 不幸的是,我在IIS中的请求过滤中设置了这个设置:

选项问题与请求过滤

通过添加下面的安全节点到web.config是必要的敲出来 – 完整的system.webserver包括上下文:

  <system.webServer> <modules runAllManagedModulesForAllRequests="true"> <remove name="WebDAVModule" /> </modules> <handlers> <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> <remove name="OPTIONSVerbHandler" /> <remove name="TRACEVerbHandler" /> <remove name="WebDAV" /> <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> </handlers> <security> <requestFiltering> <verbs> <remove verb="OPTIONS" /> </verbs> </requestFiltering> </security> </system.webServer> 

虽然这不是完美的答案,但它是Google上“IIS选项404”的第一个结果,所以我希望这可以帮助别人。 我今天花了一个小时。

对我来说,在运行使用IIS Express的应用程序时,我在我的网站上收到了404错误,不使用IIS Express(使用本地IIS)。 如果我closures用于运行IIS Express的浏览器,则404将会消失。 对我来说,我有我的IIS Express项目调用本地IIS服务,所以我转换IIS Express项目使用本地IIS,然后一切工作。 由于某种原因,您似乎无法同时运行非IIS Express和本地IIS网站。