我有一个ASP.NET Web API,在使用localhost:1783
的“IIS Express”上运行时可以正常工作
但是,如果我没有“使用IIS Express”,然后按“创建虚拟目录”......
...我刚收到404错误:
任何想法都错了吗?谢谢!
答案 0 :(得分:39)
虽然标记的答案可以使其正常工作,但您真正需要添加到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中网站的根目录。通过将模块添加到此应用程序的配置中,我们让模块在此应用程序的路径(您的子目录路径)下运行,并且路由模块启动。
答案 1 :(得分:14)
对我来说,除了runAllManagedModulesForAllRequests="true"
我还需要编辑"path"
属性如下。以前我的路径属性是"*."
,这意味着它只在包含点的网址上执行
字符。但是,我的应用程序的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>
答案 2 :(得分:10)
您可能需要安装Hotfix KB980368。
本文介绍了一种更新,该更新使某些Internet信息服务(IIS)7.0或IIS 7.5处理程序能够处理其URL不以句点结尾的请求。具体来说,这些处理程序映射到“”。请求路径。目前,映射到“”的处理程序。请求路径仅处理其URL以句点结尾的请求。例如,处理程序仅处理其URL类似于以下URL的请求:
http://www.example.com/ExampleSite/ExampleFile
应用此更新后,映射到“*”的处理程序。请求路径可以处理其URL以句点结尾的请求以及其URL不以句点结尾的请求。例如,处理程序现在可以处理类似于以下URL的请求:
http://www.example.com/ExampleSite/ExampleFile
http://www.example.com/ExampleSite/ExampleFile
应用此修补程序后,ASP.NET 4应用程序可以处理无扩展URL请求。因此,在处理程序执行之前运行的托管HttpModule将运行。在某些情况下,HttpModules可以返回无扩展URL的错误。例如,编写为仅期望.aspx请求的HttpModule现在可能在尝试访问HttpContext.Session属性时返回错误。
答案 3 :(得分:8)
由于以下
,也可能发生此问题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
答案 4 :(得分:2)
有人说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
答案 5 :(得分:0)
我使用的是Visual Studio 2012,下载并安装Microsoft最近发布的Update 2(截至2013年4月)。
该更新中存在一些与此问题相关的错误修复。
答案 6 :(得分:0)
我有同样的问题。更多的R&amp; D我发现了这个问题。
但只要你的配置是finne意味着aspnet 64位和IIS那么好 我看到的唯一问题是路径“web api采取本地方向路径”,所以你需要狂热它。像这样.. 〜../../../ api / products /
非常感谢您发布问题。我倾斜了很多abt iis和配置文件中的其他设置。
答案 7 :(得分:0)
我一直在努力解决这个问题几天,尝试各种建议。我的开发机器工作正常,但我部署的新机器给了我404错误。
在IIS管理器中,我比较了两台机器上的处理程序映射,以发现很多处理程序都丢失了。事实证明,机器上没有安装ASP.Net 5。
答案 8 :(得分:0)
对我来说,这个问题与其他答案略有不同,因为我在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>
虽然它不是这个问题的完美答案,但它是&#34; IIS OPTIONS 404&#34;的第一个结果。在Google上,所以我希望这可以帮助别人;今天花了我一个小时。
答案 9 :(得分:0)
对我来说,我在运行使用IIS Express的应用程序时不使用IIS Express(使用本地IIS)的网站上收到404错误。如果我要关闭用于运行IIS Express的浏览器,那么404就会消失。对我来说,我的IIS Express项目调用了本地IIS服务,因此我将IIS Express项目转换为使用本地IIS,然后一切正常。由于某种原因,您似乎无法同时运行非IIS Express和本地IIS网站。
答案 10 :(得分:0)
在完成以下所有设置之后,请花整整一周的时间!最后保存下来。 从IIS中的ISAPI文件管理器中删除UrlScan可以解决我们的问题
答案 11 :(得分:0)
我在使用 Blazor 时遇到了这个问题,发现将 NavManagers“baseUrl”合并到我对控制器的调用中解决了这个问题,无论使用的是虚拟目录还是根网站。
这对我有用!
string baseUrl = NavigationManager.BaseUri.ToString();
NavigationManager.NavigateTo(**baseUrl** + $"api/Download/DownloadFile?FileName=" + sFilename, true);