当在IIS 7部署的ASP.NET Web API应用程序提供404(ASP.NET Web API

2019-07-21 12:44发布

我有一个ASP.NET Web API与本地主机上的“IIS快车”运行时正常工作:1783

但是,当我不交叉“使用IIS快车”,然后按“创建虚拟目录” ...

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

任何想法什么错? 谢谢!

Answer 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网站的根目录。 通过添加模块来此应用程序的配置中,我们遇到了这个应用程序的路径下运行的模块(你的子目录的路径),并在路由模块踢。



Answer 2:

对于我来说,除了具有runAllManagedModulesForAllRequests="true"我也有编辑的"path"属性下方。 以前我的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>


Answer 3:

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

本文介绍了一个更新,使某些Internet信息服务(IIS)7.0或IIS 7.5的处理程序来处理其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的请求。 因此,设法在此之前处理程序的执行运行将运行的HttpModules。 在某些情况下,可以的HttpModules返回扩展名的网址错误。 例如,写一个HttpModule预期,当它试图访问HttpContext.Session属性只的.aspx请求现在可能返回错误。



Answer 4:

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

1.In 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

这些组件将不会在bin文件夹在默认情况下,如果复制发布是通过Visual Studio,因为Web API包在开发机通过安装的NuGet。 不过,如果你想获得这些文件可作为Visual Studio中的一部分发布,那么你需要CopyLocal设置为True,这些组件



Answer 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



Answer 6:

我对你使用Visual Studio 2012,下载并安装更新2,微软最近发布(作为二千○一十三分之四)。

的Visual Studio 2012更新2

有在更新与此问题相关的一些bug修复。



Answer 7:

我不得不为同样的问题。 AFER很多R&d的我发现这个问题。

但只要你的配置是finne平均是ASPNET 64位和IIS很好然后我看到的唯一问题是路径“网络API以当地directiry路径”,因此需要使用Avid它。 通过这样的..〜../../../ API /产品/

非常感谢你张贴的问题。 我很多leanred生根粉和IIS配置文件中的其他设置。



Answer 8:

我一直在争夺这个问题几天尝试各种事物提出的。 我的dev的机器工作正常,但新机,我部署到是给我的404错误。

在IIS管理器,我对比了两台机器的处理器映射,实现了很多处理的人失踪。 原来,ASP.Net 5没有在机器上安装。



Answer 9:

对我来说,这个问题比其他的答案稍有不同,因为我只收到关于OPTIONS 404,但我已经在我的集成扩展名的URL处理程序选项特别声明选项。 很混乱。

  1. 正如其他的模块都表示,runAllManagedModulesForAllRequests =“真”节点是一个简单的方法来掩盖式解决大多数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”的第一个结果,所以我希望这可以帮助别人了; 今天花了我一个小时。



Answer 10:

对我来说,我收到了404错误在我的网站不使用IIS快递(使用本地IIS)运行时使用IIS快速的应用程序。 如果我将关闭用于运行IIS Express中的浏览器,那么404会消失。 对我来说,我有我的IIS快递项目调用到本地IIS服务,所以我转换IIS快递项目中使用本地IIS,然后一切工作。 看来,你不能在同一时间因某种原因同时运行一个非IIS Express和本地IIS网站。



文章来源: ASP.NET Web API application gives 404 when deployed at IIS 7