我有一个 ASP.NET Web API,它在使用 localhost:1783 在“IIS Express”上运行时运行良好
但是当我取消“使用 IIS Express”然后按“创建虚拟目录”时......
...我只是收到 404 错误:
有什么想法有什么问题吗?谢谢!
我有一个 ASP.NET Web API,它在使用 localhost:1783 在“IIS Express”上运行时运行良好
但是当我取消“使用 IIS Express”然后按“创建虚拟目录”时......
...我只是收到 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 中为网站的根目录启动。通过将模块添加到此应用程序的配置中,我们使模块在此应用程序的路径(您的子目录路径)下运行,并且路由模块启动。
对我来说,除了有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>
您可能需要安装修补程序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 属性时可能会返回错误。
由于以下原因,也可能发生此问题
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
有人说 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
我在使用 Blazor 和 .Net Core 时遇到了这个问题,发现将 NavManagers“baseUrl”合并到我对控制器的调用中解决了这个问题,无论使用虚拟目录还是根网站。
这对我有用!
string baseUrl = NavigationManager.BaseUri.ToString();
NavigationManager.NavigateTo(**baseUrl** + $"api/Download/DownloadFile?FileName="
+ sFilename, true);
对我来说,这个问题与其他答案略有不同,因为我只在 OPTIONS 上收到 404,但我已经在我的 Integrated Extensionless URL Handler 选项中明确说明了 OPTIONS。非常混乱。
通过将以下安全节点添加到 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”的第一个结果,所以我希望这对某人有所帮助;今天花了我一个小时。
如果您使用的是 Visual Studio 2012,请下载并安装 Microsoft 最近发布的 Update 2(截至 2013 年 4 月)。
该更新中有一些与该问题相关的错误修复。
我有同样的问题。经过大量的研发后,我发现了问题所在。
但只要您的配置是 finne 意味着 aspnet 64 位和 IIS 以及我看到的唯一问题是路径“web api 采用本地目录路径”,因此您需要使用它。像这样.. ~../../../api/products/
非常感谢您发布问题。我在配置文件中学习了很多 abt iis 和其他设置。
几天来,我一直在与这个问题作斗争,尝试了各种建议。我的开发机器工作正常,但我正在部署的新机器给了我 404 错误。
在 IIS 管理器中,我比较了两台机器上的处理程序映射,发现很多处理程序丢失了。结果发现机器上没有安装 ASP.Net 5。
对我来说,在运行使用 IIS Express 的应用程序时,我的网站上未使用 IIS Express(使用本地 IIS)收到 404 错误。如果我关闭用于运行 IIS Express 的浏览器,那么 404 就会消失。对我来说,我的 IIS Express 项目调用了本地 IIS 服务,因此我将 IIS Express 项目转换为使用本地 IIS,然后一切正常。由于某种原因,您似乎无法同时运行非 IIS Express 和本地 IIS 网站。
花一整周,毕竟以下设置工作!终于得救了。 从 IIS 中的 ISAPI 过滤器中删除 UrlScan 解决了我们案例中的问题