首页 文章

在IIS 7.5中托管的Web Api中找不到HTTP 404页面

提问于
浏览
87

我有一个Web Api应用程序 . 当我使用VS 2010调试开发服务器测试它时,它运行得非常好 . 但我现在将其部署到IIS 7.5,并在尝试访问应用程序时收到HTTP 404错误 .

这是我的web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-FlowGearProxy-20123141219;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="true" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>
</configuration>

27 回答

  • 2

    不要忘记部署global.asax

  • 13

    我也在努力解决这个问题 . 幸运的是,Steve Michelotti记录了一个对我有用的解决方案here .

    在一天结束时,我将所有动词(verb =“*”)启用到我的Web配置中的ExtensionlessUrlHandler-Integrated-4.0处理程序 .

    <system.webServer>
        <validation validateIntegratedModeConfiguration="false" />
        <modules runAllManagedModulesForAllRequests="true" />
            <handlers>
                <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
                <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
            </handlers>
    </system.webServer>
    

    其他人指出,启用WebDAV会导致问题 . 幸运的是,我也没有遇到过这个问题 .

  • 3

    有同样的问题 . 此配置设置解决了该问题 .

    <system.webServer>
        .....
        <modules runAllManagedModulesForAllRequests="true" />
        .....
    </system.webServer>
    

    如上述http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html中所述,应避免使用解决方案 . 请改用它 . Lopsided也提供了相同的解决方案 . 保持在这里让用户避免实施第一个工作解决方案 .

    <modules>
      <remove name="UrlRoutingModule-4.0" />
      <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
      <!-- any other modules you want to run in MVC e.g. FormsAuthentication, Roles etc. -->
    </modules>
    
  • 0

    如果在ASP.NET之后安装或启用了IIS,则需要手动向IIS注册ASP.NET才能使.NET应用程序正常工作 .

    For Windows 7 and earlier:

    • 以管理员身份运行命令提示符(cmd.exe) .

    • 导航到相应的.NET Framework位置 . (例如C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319)

    • 运行aspnet_regiis.exe -i

    For Windows 8 and later:

    • 从开始菜单中,键入"Turn windows features on or off"并选择第一个结果 .

    • 展开Internet信息服务:万维网服务:应用程序开发功能并选择ASP.NET 4.5(如果需要支持.NET Framework 2.0-3.5上的项目,则选择ASP.NET 3.5) .

    • 单击“确定” .

  • 0

    您是在虚拟目录或应用程序中运行Web API应用程序吗?

    例如:当我将项目移动到默认网站> SampleWebAPI下的本地IIS时,我遇到了同样的问题 . 我相信这是由于 URL 路由的变化如下:

    原文: localhost:3092/api/values
    感动: localhost/SampleWebAPI/api/values

    如果将Web API项目移动到在不同端口上运行的自己的网站,它似乎可以工作 .

    附加说明:我通过在我的网站中添加 api 作为应用程序的别名而导致有效的 URL 为:

    localhost:81/api/api/values - 在将网站移至其自己的网站后注意到了这一点

    因此,因为我想在我的网站和web api mvc项目站点之间保持分离,所以我将 global.asax 中的Web API "DefaultAPI"中的路由规则从 api/{controller}/{id} 更改为 {controller}/{id} ,将ASP.NET MVC中的路由规则 Default{controller}/{id} 更改为 info/{controller}/{id} .

  • 2

    这是唯一对我有用的答案......

    我有一个类似的问题......似乎无论我做了什么,没有任何东西被重定向,我的全局文件被忽略了 . 在我找到这个答案之前,我认真考虑结束这一切 . 我希望这个链接有助于其他人 .


    将以下内容添加到web.config文件中对我有用:

    <system.webServer>
      <modules>
        <remove name="UrlRoutingModule-4.0" />
        <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
      </modules>
    </system.webServer>
    

    system.webServer标签当然已经存在,但是我将modules标签添加到它,然后将modules和remove标签添加到模块标签 .

  • 25

    要检查的一些事项:

    • 确保已安装.NET Framework 4 .

    • 确保为您的网站和虚拟目录选择了.NET Framework的第4版(如果适用) .

    • 确保已安装MVC或在bin目录中具有相应的DLL .

    • 可能需要允许ASP.NET 4.0 Web服务扩展

    • 将应用程序放在自己的应用程序池中 .

    • 确保该目录至少具有"Scripts Only"执行权限 .

  • 2

    我遇到了类似的问题 . 我在我的web.config文件中有正确的设置,但是在 Classic mode 而不是 Integrated mode 中运行了应用程序池

    screen shot

  • 0

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

    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

    SadishKumar.V

  • 2

    我也遇到了这个问题 . 我通过转到应用程序池>应用程序池名称并将.NET Framework从版本v.2.0.50727更改为v4.0.30319来解决了该问题 .

  • 33

    根据这个SO answer,我只需要将 path="*." 更改为 path="*" ,以便在 web.config 中的 configuration>system.WebServer>handlers 中添加 ExtensionlessUrlHandler-Integrated-4.0

    之前:

    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    

    后:

    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    
  • 0

    微软正式修复:http://support.microsoft.com/kb/980368

    我强烈建议不要使用<modules runAllManagedModulesForAllRequests =“true”> . 这导致所有已注册的HTTP模块将处理所有请求(甚至.jpg,.css,.pdf等) . 有两个负面时刻:a)硬件资源的额外负载; b)潜在的错误,因为http模块将处理新类型的内容 .

  • 0

    在按照Windows Azure教程告诉我将文件“WebRole.cs”添加到我的项目后,我开始从Web API获得404响应 .

    从我的项目中删除“WebRole.cs”后,我的Web API调用再次开始工作 .

  • 49

    我必须禁用文件发布选项“在发布期间预编译” .

  • 0

    请确保应用程序池位于 Integrated mode
    并将以下内容添加到web.config文件中:

    <system.webServer>
        .....
        <modules runAllManagedModulesForAllRequests="true" />
        .....
    </system.webServer>
    
  • 0

    在我的情况下,问题只是我试图访问该网站

    myserver.myintranet.com/mysite

    但是IIS中http的网站绑定没有在绑定中指定的主机名 . 它以前工作过,我不知道它是如何被吹走的 .

    一旦我将 myserver.myintranet.com 放入主机名,404就消失了 .

    在IIS管理器中,您将进入操作窗格中的 Bindings... ,然后编辑http绑定以指定主机名 .

  • 6

    有同样的问题,从IIS提供的web api控制器的404响应,但从VS2010一切正常 . 上述解决方案均不适合我 . 最终我发现问题是我们为应用程序添加了WSE 3.0支持,并且应用程序的/ bin目录中缺少Microsoft.Web.Services3 dll . 很奇怪,但是在复制dll之后,路由映射开始起作用了 .

  • 83

    你在做什么样的HTTP请求?

    这是一个稍微左侧的答案,但您是否尝试删除404的IIS默认错误页面以检查您的API实际返回的内容?

    我有一个问题,我希望控制器方法在我向其发布错误的ID时返回404 . 我发现我总是得到IIS 404“文件或目录未找到”页面,而不是我的API的HTTP响应 . 删除默认的404错误页面解决了问题 .

    不同的问题,但你永远不知道它可能有所帮助;)

  • 0

    web.config文件中的这条配置对我有帮助:在system.webServer部分:

    <security>
              <requestFiltering>
                  <verbs applyToWebDAV="true">
                      <remove verb="PUT" />
                      <add verb="PUT" allowed="true" />
                      <remove verb="DELETE" />
                      <add verb="DELETE" allowed="true" />
                      <remove verb="PATCH" />
                      <add verb="PATCH" allowed="true" />
                  </verbs>
              </requestFiltering>
          </security>
    
  • 1

    我最近在我的所有Web Api 2路由/控制器上都发现了404错误 . 所以我进入实际的服务器并尝试使用localhost而不是主机名浏览并获得“404.7 Not Found - 请求过滤模块配置为拒绝文件扩展名” .

    This SO post help me solve it.

  • 0

    当我为UrlRoutingModule-4.0启用复选框时,它已经解决了我:

    IIS管理器>模块>选择UrlRoutingModule-4.0>编辑模块>选中复选框“仅对ASP.NET应用程序或托管处理程序的请求调用” .

  • 0

    我遇到了同样的问题:在使用Visual Studio 2013的新安装的计算机上,web api项目在IISExpress下运行,但不在本地IIS下运行 . 我尝试了所有我能找到的东西,但最终问题不再是Web API,而是使用MVC:即使它已经安装,也没有运行MVC项目 .

    对我有用的是卸载IIS(从ADD / REMOVE Windows功能),然后重新安装它,然后运行aspnet_regiis -i . 也许这有助于其他人 .

  • 11

    我花了很多时间尝试很多事情才最终意识到我在网站/默认网站中添加我的网络应用程序,但在另一个链接到另一个端口的网站中 . 显然在端口80上尝试localhost会产生404 .

  • 5

    我什么都不做,只需在web.config中添加此标记,其工作此问题出现以下几点之一

    • 使用MVC或asp.net表单在同一项目中使用Web Api

    • 在Global.asax中使用RouteConfig和WebApiConfig作为GlobalConfiguration.Configure(WebApiConfig.Register); RouteConfig.RegisterRoutes(RouteTable.Routes);

    • 使用RouteConfig有两个目的,asp.net表单使用friendlyurl和mvc路由MVC路由

    我们只是在web.config中使用这个标签,它会起作用 .

    <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
       .........................
    </modules>
    </system.webServer>
    
  • 1

    与Web API和.Net Core Web API陷入同样的问题 . 在调试时在VS 2017中工作正常,但在发布到IIS 7.5时返回404 . 我的解决方案是改变我创建网站的方式 . 我不得不发布到网站的根目录(通过右键单击站点...添加网站创建),而是创建一个应用程序(通过右键单击网站...添加应用程序创建)并发布到该文件夹 . 请注意,对于Core版本,我必须将Application Pool .NET Framework Version设置更改为“No Managed Code” .

  • 9

    我也在努力解决这个问题 . 我的确切问题是我有一个ASMX Web服务,当我将参数输入到Web方法并对其进行测试时,它会给我404.特定方法在过去运行良好并且没有被更改,只有重新发表 . 然后我来到这里并尝试了所有发布的答案并没有任何帮助 .

    我的终极解决方案我知道这很激烈,但我刚刚创建了一个新的Visual Studio解决方案和Web项目 . 选择了MVC,然后我做了一个“添加”>“新项目”,选择了“Visual C#”>“Web”和“Web服务(ASMX)” . 我复制了所有旧的代码隐藏代码,然后我记下了它在我的新项目中给出新文件的命名空间,然后将我所有的旧代码粘贴到新项目中的新代码隐藏文件中并放入命名空间回到原来的样子 . 然后我在我的项目中创建了我的文件夹,然后使用Visual Studio执行“添加”>“新建文件夹”,然后使用Windows资源管理器将我的文件中的文件复制回我的其他项目中的文件夹中,然后右键单击每个文件夹中的文件夹 . Visual Studio并执行“添加”>“现有项目...”并将这些文件夹中的项目拖到我的新项目的Visual Studio文件夹中 . 我再次引用了所有的.NET程序集,打开了两个项目,这样我就可以比较之前引用的那些(我有一个吨!) . 我不得不将我的新项目命名略有不同 - 例如我基本上做了类似于“GeneralWebApp”而不是“MyWebApp”的东西 - 所以我必须在我的整个解决方案中做一个“全部替换”以替换该名称,所以它会为我的所有文件获取正确的命名空间 . 然后我在项目上做了一个“Rebuild All”,然后在我得到正确构建时Visual Studio提供的“Play”按钮启动它 . 它工作正常 . 所以我发布了它,当我从那里运行它时,我发布它的服务器上的一切都很好 . 我没有解释发生了什么,但这就是我通过它的方式 . 仅仅看看Visual Studio正在做的事情是否已经破坏它并不是一个糟糕的测试 .

  • 3

    对我来说问题是根网站配置为使用.NET 2.0应用程序池,我在该网站中的应用程序是.NET 4.5 .

    我创建了一个带有.NET 4应用程序池的新站点,并将我的应用程序置于其根部 - 并且运行正常 .

相关问题