55

我有一个 ASP.NET Web API,它在使用 localhost:1783 在“IIS Express”上运行时运行良好

VS中的设置

但是当我取消“使用 IIS Express”然后按“创建虚拟目录”时......

新设置

...我只是收到 404 错误: 404错误

有什么想法有什么问题吗?谢谢!

4

12 回答 12

41

虽然标记的答案可以正常工作,但您真正需要添加到 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 中为网站的根目录启动。通过将模块添加到此应用程序的配置中,我们使模块在此应用程序的路径(您的子目录路径)下运行,并且路由模块启动。

于 2014-05-12T20:51:40.973 回答
15

对我来说,除了有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>
于 2015-03-25T19:36:29.827 回答
11

您可能需要安装修补程序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 属性时可能会返回错误。

于 2014-02-14T08:38:31.133 回答
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

于 2014-11-17T11:56:13.047 回答
3

有人说 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

于 2014-02-16T17:31:56.153 回答
1

我在使用 Blazor 和 .Net Core 时遇到了这个问题,发现将 NavManagers“baseUrl”合并到我对控制器的调用中解决了这个问题,无论使用虚拟目录还是根网站。

这对我有用!

string baseUrl = NavigationManager.BaseUri.ToString();

NavigationManager.NavigateTo(**baseUrl** + $"api/Download/DownloadFile?FileName=" 
                                         + sFilename, true);
于 2021-07-14T13:55:58.327 回答
1

对我来说,这个问题与其他答案略有不同,因为我只在 OPTIONS 上收到 404,但我已经在我的 Integrated Extensionless URL Handler 选项中明确说明了 OPTIONS。非常混乱。

  1. 正如其他人所说,模块节点中的 runAllManagedModulesForAllRequests="true" 是一揽子修复大多数 Web API 404 问题的简单方法——尽管我更喜欢@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>

虽然这不是这个问题的完美答案,但它是谷歌上“IIS OPTIONS 404”的第一个结果,所以我希望这对某人有所帮助;今天花了我一个小时。

于 2016-05-17T21:19:14.607 回答
0

如果您使用的是 Visual Studio 2012,请下载并安装 Microsoft 最近发布的 Update 2(截至 2013 年 4 月)。

视觉工作室 2012 更新 2

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

于 2013-04-19T15:29:15.360 回答
0

我有同样的问题。经过大量的研发后,我发现了问题所在。

但只要您的配置是 finne 意味着 aspnet 64 位和 IIS 以及我看到的唯一问题是路径“web api 采用本地目录路径”,因此您需要使用它。像这样.. ~../../../api/products/

非常感谢您发布问题。我在配置文件中学习了很多 abt iis 和其他设置。

于 2014-09-25T15:24:25.800 回答
0

几天来,我一直在与这个问题作斗争,尝试了各种建议。我的开发机器工作正常,但我正在部署的新机器给了我 404 错误。

在 IIS 管理器中,我比较了两台机器上的处理程序映射,发现很多处理程序丢失了。结果发现机器上没有安装 ASP.Net 5。

于 2016-05-11T21:08:24.917 回答
0

对我来说,在运行使用 IIS Express 的应用程序时,我的网站上未使用 IIS Express(使用本地 IIS)收到 404 错误。如果我关闭用于运行 IIS Express 的浏览器,那么 404 就会消失。对我来说,我的 IIS Express 项目调用了本地 IIS 服务,因此我将 IIS Express 项目转换为使用本地 IIS,然后一切正常。由于某种原因,您似乎无法同时运行非 IIS Express 和本地 IIS 网站。

于 2017-04-12T02:05:18.900 回答
0

花一整周,毕竟以下设置工作!终于得救了。 从 IIS 中的 ISAPI 过滤器中删除 UrlScan 解决了我们案例中的问题

于 2020-08-11T10:52:53.713 回答