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

C# 在IIS 7.5中托管的Web Api中找不到HTTP 404页面,c#,asp.net-web-api,iis-7.5,http-status-code-404,C#,Asp.net Web Api,Iis 7.5,Http Status Code 404,我有一个Web Api应用程序。当我使用VS2010调试开发服务器测试它时,它工作得非常好。但我现在将其部署到IIS7.5,并且在尝试访问该应用程序时遇到HTTP 404错误 这是我的web.config 需要检查的几件事: 确保已安装.NET Framework 4 确保为您的网站和虚拟目录选择了.NET Framework的版本4(如果适用) 确保已安装MVC,或在bin目录中安装了相应的DLL 可能需要允许ASP.NET 4.0 web服务扩展 将应用程序放在它自己的应用程序池中 确保目

我有一个Web Api应用程序。当我使用VS2010调试开发服务器测试它时,它工作得非常好。但我现在将其部署到IIS7.5,并且在尝试访问该应用程序时遇到HTTP 404错误

这是我的web.config


需要检查的几件事:

  • 确保已安装.NET Framework 4
  • 确保为您的网站和虚拟目录选择了.NET Framework的版本4(如果适用)
  • 确保已安装MVC,或在bin目录中安装了相应的DLL
  • 可能需要允许ASP.NET 4.0 web服务扩展
  • 将应用程序放在它自己的应用程序池中
  • 确保目录至少具有“仅脚本”执行权限

  • 您正在发出什么类型的HTTP请求

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

    我有一个问题,当我向控制器方法发送错误的id时,我希望它返回404。我发现我总是从我的API获得IIS404“未找到文件或目录”页面,而不是HTTP响应。删除默认的404错误页面解决了问题


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

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

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

    原始:
    localhost:3092/api/values

    移动:
    localhost/SampleWebAPI/api/values

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

    附加说明:我添加了
    api
    作为我网站中应用程序的别名,这使得问题进一步复杂化,导致有效的
    URL
    为:

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


    因此,因为我想保持我的网站和web api mvc项目网站之间的分离,我将web api“DefaultAPI”的
    global.asax
    中的路由规则从
    api/{controller}/{id}
    更改为
    {controller}/{id}
    并将ASP.NET mvc one
    中的
    Default
    更改为
    {controller}/{id}
    to
    info/{controller}/{id}

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

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

    <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会导致问题。幸运的是,我也没有遇到这个问题。

    我开始从Web API获得404响应,之前,我学习了一个Microsoft Azure教程,该教程告诉我将文件“WebRole.cs”添加到我的项目中


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

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

    适用于Windows 7及更早版本:

  • 以管理员身份运行命令提示符(cmd.exe)
  • 导航到适当的.NET Framework位置。(例如C:\Windows\Microsoft.NET\Framework64\v4.0.30319)
  • 运行aspnet_regiis.exe-i
  • 适用于Windows 8及更高版本:

  • 在“开始”菜单中,键入“打开或关闭windows功能”,然后选择第一个结果
  • 展开Internet信息服务:万维网服务:应用程序开发功能,然后选择ASP.NET 4.5(如果需要支持.NET Framework 2.0-3.5上的项目,请选择ASP.NET 3.5)
  • 单击“确定”

  • 我也有同样的问题。此配置设置解决了该问题

    <system.webServer>
        .....
        <modules runAllManagedModulesForAllRequests="true" />
        .....
    </system.webServer>
    
    
    .....
    .....
    
    如上所述,应避免使用上述解决方案。用这个代替。 同样的解决方案也由“不平衡”提供。将其保留在此处,使用户可以避免实现第一个工作解决方案

    <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>
    
    
    
    也有同样的问题,当从IIS提供服务时,web api控制器的响应为404,但从VS2010开始,一切正常。上述解决方案对我都不起作用。最后,我发现问题在于我们为应用程序添加了WSE 3.0支持,并且应用程序的/bin目录中缺少Microsoft.Web.Services3 dll。奇怪,但复制dll后,路由映射开始工作。

    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>      
    

    这是唯一对我有效的答案

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


    将以下内容添加到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标记当然已经存在了,但我将模块标记添加到其中,然后将移除和添加标记添加到模块标记。

    最近,我的所有Web Api 2路由/控制器都出现了404 not found错误。因此,我进入实际的服务器,尝试使用localhost而不是hos进行浏览
    <system.webServer>
         <modules runAllManagedModulesForAllRequests="true" /> 
    <system.webServer>
    
    <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
       .........................
    </modules>
    </system.webServer>
    
    <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" />
    
    <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.1.1.3" newVersion="4.1.1.3" />
    </dependentAssembly>
    <dependentAssembly>
        <assemblyIdentity name="Microsoft.IdentityModel.Tokens" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
    </dependentAssembly>