ASP.NET Web API 应用程序在 IIS 7 上部署时提供 404
Posted
技术标签:
【中文标题】ASP.NET Web API 应用程序在 IIS 7 上部署时提供 404【英文标题】:ASP.NET Web API application gives 404 when deployed at IIS 7 【发布时间】:2013-03-01 15:44:28 【问题描述】:我有一个 ASP.NET Web API,在使用 localhost:1783 在“IIS Express”上运行时可以正常工作
但是当我打开“使用 IIS Express”然后按“创建虚拟目录”时...
...我只收到 404 错误:
任何想法有什么问题吗?谢谢!
【问题讨论】:
你在哪里设置文件路径。 您是否已签入系统托盘以查看在 IIS express 上运行的应用程序 @Shekhar 据我了解,单击创建虚拟目录时,VS 会为我执行此操作。即物理路径似乎正确,Virtual Pah 是 MySite1。 “文件路径”是别的吗? 【参考方案1】:虽然标记的答案可以正常工作,但您真正需要添加到 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 中为网站的根目录启动。通过将模块添加到此应用程序的配置中,我们使模块在此应用程序的路径(您的子目录路径)下运行,并且路由模块启动。
【讨论】:
这个解决方案更好,因为对 runAllManagedModulesForAllRequests="true" britishdeveloper.co.uk/2010/06/… 有负面影响 我发现这会破坏所有静态文件。它不应该在模块部分吗? ***.com/a/16475231/1280068 使用您上面建议的设置,我收到以下错误:system.web.urlroutingmodule does not implement iHttpHandlerFactory...
。而是as suggested here,我在module
:<remove name="BundleModule" /> <add name="BundleModule" type="System.Web.Optimization.BundleModule" />
【参考方案2】:
对我来说,除了拥有runAllManagedModulesForAllRequests="true"
,我还必须编辑"path"
下面的属性。以前我的路径属性是 "*."
这意味着它只在包含点的 url 上执行
特点。但是,我的应用程序的 url 不包含点。当我将路径切换到"*"
时,它就起作用了。
这是我现在拥有的:
<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>
【讨论】:
【参考方案3】:您可能需要安装 Hotfix KB980368。
本文介绍了一种更新,它使某些 Internet 信息服务 (IIS) 7.0 或 IIS 7.5 处理程序能够处理其 URL 不以句点结尾的请求。具体来说,这些处理程序被映射到“”。请求路径。当前,映射到“”的处理程序。请求路径仅处理 URL 以句点结尾的请求。例如,处理程序仅处理 URL 类似于以下 URL 的请求:
http://www.example.com/ExampleSite/ExampleFile.
应用此更新后,映射到“*.”的处理程序request path 可以处理 URL 以句点结尾的请求和 URL 不以句点结尾的请求。例如,处理程序现在可以处理类似于以下 URL 的请求:
http://www.example.com/ExampleSite/ExampleFile
http://www.example.com/ExampleSite/ExampleFile.
应用此补丁后,ASP.NET 4 应用程序可以处理对无扩展名 URL 的请求。因此,在处理程序执行之前运行的托管 HttpModules 将运行。在某些情况下,HttpModules 可能会返回无扩展 URL 的错误。例如,编写为仅预期 .aspx 请求的 HttpModule 现在在尝试访问 HttpContext.Session 属性时可能会返回错误。
【讨论】:
如果您有一个带有 IIS 7.0(不是 R2)的 Windows 2008 服务器,那么这是修补程序的下载链接:microsoft.com/en-us/download/details.aspx?id=11342【参考方案4】:由于以下原因也可能发生此问题
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
【讨论】:
你刚刚救了我几个小时的痛苦。 +1! 这个答案的第 2 部分解决了这个问题***.com/questions/30315563/… 第 1 部分不好:(正如britishdeveloper.co.uk/2010/06/… 解释的那样,您应该只添加 url 路由模块 :)【参考方案5】:有人说 runAllManagedModulesForAllRequests="true" 会有性能问题和 MVC 路由问题。 他们建议使用以下内容:
http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html
http://bartwullems.blogspot.com/2012/06/optimize-performance-of-your-web.html
【讨论】:
请嵌入/写下您的答案,而不仅仅是链接 当我在 webforms + web api asp.net 应用程序中使用 runAllManagedModulesForAllRequests="true" 时,我遇到了巨大的性能损失【参考方案6】:对我来说,这个问题与其他答案略有不同,因为我在 OPTIONS 上只收到 404,但我已经在我的集成无扩展 URL 处理程序选项中明确说明了 OPTIONS。非常混乱。
-
正如其他人所说,runAllManagedModulesForAllRequests="true" 在
模块节点是一揽子修复大多数 Web API 404 问题的简单方法 - 尽管我更喜欢 @DavidandroidDev 的答案,它的侵入性要小得多。但在我的情况下还有一些额外的东西。
不幸的是,我在 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>
虽然这不是这个问题的完美答案,但它是谷歌上“IIS OPTIONS 404”的第一个结果,所以我希望这对某人有所帮助;今天花了我一个小时。
【讨论】:
【参考方案7】:如果您使用的是 Visual Studio 2012,请下载并安装 Microsoft 最近发布的 Update 2(截至 2013 年 4 月)。
Visual Studio 2012 Update 2
该更新中有一些与该问题相关的错误修复。
【讨论】:
【参考方案8】:我也有同样的问题。经过大量的研发,我发现了问题。
但只要你的配置是 finne 意味着 aspnet 64 位和 IIS 就好了 我看到的唯一问题是路径“web api 采用本地目录路径”,因此您需要使用它。像这样.. ~../../../api/products/
非常感谢您发布问题。我在配置文件中学习了很多 abt iis 和其他设置。
【讨论】:
【参考方案9】:几天来,我一直在与这个问题作斗争,尝试了各种建议。我的开发机器工作正常,但我正在部署的新机器给了我 404 错误。
在 IIS 管理器中,我比较了两台机器上的处理程序映射,发现很多处理程序丢失了。结果发现机器上没有安装 ASP.Net 5。
【讨论】:
【参考方案10】:对我来说,在运行使用 IIS Express 的应用程序时,我的网站未使用 IIS Express(使用本地 IIS)收到 404 错误。如果我关闭用于运行 IIS Express 的浏览器,那么 404 就会消失。对我来说,我的 IIS Express 项目调用了本地 IIS 服务,因此我将 IIS Express 项目转换为使用本地 IIS,然后一切正常。由于某种原因,您似乎无法同时运行非 IIS Express 和本地 IIS 网站。
【讨论】:
【参考方案11】:在以下所有设置成功之后,花一整周的时间!终于得救了。 从 IIS 中的 ISAPI 过滤器中删除 UrlScan 解决了我们案例中的问题
【讨论】:
【参考方案12】:我在使用 Blazor 时遇到了这个问题,发现将 NavManagers“baseUrl”合并到我对控制器的调用中解决了这个问题,无论使用虚拟目录还是根网站。
这对我有用!
string baseUrl = NavigationManager.BaseUri.ToString();
NavigationManager.NavigateTo(**baseUrl** + $"api/Download/DownloadFile?FileName=" + sFilename, true);
【讨论】:
以上是关于ASP.NET Web API 应用程序在 IIS 7 上部署时提供 404的主要内容,如果未能解决你的问题,请参考以下文章
无法让 ASP.NET Core Web API 与 IIS 一起使用 [关闭]
IIS 中同一网站下的主机前端(react)和后端(ASP.NET Web Api)
ASP.NET Web API - 不允许 PUT 和 DELETE 动词 - IIS 8
仅在 IIS 部署后的 Asp.net Web api 异常:名为“HelpPage_Default”的路由已在路由集合中