IIS 7.5上的ASP.NET Web Api 2中断

时间:2016-05-07 21:37:07

标签: asp.net .net iis iis-7.5 asp.net-web-api2

我有一个非常小的AngularJS Web应用程序,我已经编写过,并且我尝试在我的计算机上本地托管IIS,以便它可用于我的LAN上的其他设备。在这个应用程序中,我使用Web API 2调用数据访问,它通过Entity Framework连接到我的数据库。

通过在Visual Studio中启动应用程序,我在本地运行应用程序时运行正常。但是,当我将其部署到我的IIS安装时,每当请求发送到Web API网址时,我都会收到404错误。页面本身加载,我可以导航到我的其他页面,只有在我收到我在Web API控制器中声明的一个方法的请求时才会收到404错误。

我有Windows 7 Pro 64位,并通过控制面板中的添加/删除Windows功能安装了IIS。我已经通过aspnet_regiis -i命令安装了ASP.NET 4.0。发布时我通过右键单击项目并选择“发布”在Visual Studio社区2015中这样做。在第一次设置发布时,我使用了官方ASP.NET站点的指南(http://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/deploying-to-iis

我已尝试以下步骤解决问题但没有成功:

  1. 通过添加/删除Windows功能卸载/重新安装IIS
  2. <validation validateIntegratedModeConfiguration="false" /><modules runAllManagedModulesForAllRequests="true" />添加到web.config
  3. 更改web.config
  4. 中定义的<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />处理程序的路径(通过删除句点)
  5. 手动将ApiURIs-ISAPI-Ingegrated-4.0处理程序添加到Web配置
  6. <remove name="UrlRoutingModule" /><add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule" preCondition=""/>添加到<system.webServer>模块部分
  7. 仔细检查我的应用程序池是否已设置为集成模式并设置为使用.Net Framework v4.0.30319
  8. 应用https://support.microsoft.com/en-us/kb/980368提供的官方Microsoft修补程序在尝试安装此修补程序时,它指出它与我的计算机不兼容。
  9. 确保我的计算机是最新的Windows更新
  10. 取消选中&#34;仅针对托管处理程序上的ASP.NET应用程序的请求进行调用&#34;通过网站找到的UrlRoutingModule-4.0模块的复选框 - &gt;默认网站 - &gt; IIS部分中的模块 - &gt;操作
  11. 下的绑定选项右侧
  12. 验证System.Net.Http,System.Net.Http.Formatting,System.Web.Http.WebHost和System.Web.Http程序集是否都存在于站点的bin文件夹中
  13. 我已经遍布各个互联网寻找近两天的解决方案而且尚未找到解决方案。在遇到同样问题的人们网站上似乎有许多类似的问题,但到目前为止,我发现的几个问题都没有解决。

    对我而言,这应该花费很多精力才能以这种方式开展工作。您可以提供任何帮助,我将不胜感激。

    TL; DR:使用AngularJS应用程序部署到IIS 7.5时Web API 2中断。有关尝试补救的步骤,请参阅上面的列表。

    更新1

    我尝试使用IIS.net中的以下链接设置失败的请求跟踪:

    1. http://www.iis.net/learn/troubleshoot/using-failed-request-tracing/troubleshooting-failed-requests-using-tracing-in-iis
    2. http://www.iis.net/learn/troubleshoot/using-failed-request-tracing/using-failed-request-tracing-rules-to-troubleshoot-application-request-routing-arr
    3. 这将返回一个日志文件,其中包含一个类似于

      的警告

      以下是完整跟踪请求中的snipet。如果需要,我很乐意提供完整的文件。

      更新2

      通过“添加/删除”功能删除WebDAV无法解决问题。错误是相同的&#34;文件无法找到&#34;上面的错误,这里是完整跟踪请求的新片段

      我的WebApiConfig类如下所示

      public static class WebApiConfig
      {
          public static void Register(HttpConfiguration config)
          {
              // Web API configuration and services
      
              // Web API routes
              config.MapHttpAttributeRoutes();
      
              config.Routes.MapHttpRoute(
                  name: "DefaultApi",
                  routeTemplate: "api/{controller}/{id}",
                  defaults: new { id = RouteParameter.Optional }
              );
          }
      }
      

      我的Web API类看起来像

      [RoutePrefix("api/foods")]
      public class FoodsController : ApiController
      {
      
          [Route("all")]
          [HttpGet]
          public List<tblFood> getAllFoods()
          {
              List<tblFood> foodsList = new List<tblFood>();
      
              try
              {
                  using (FoodEntities dbContext = new Entity_Models.FoodEntities())
                  {
                      foodsList = (from food in dbContext.tblFoods select food).ToList();
                  }
              }
              catch(EntityException e)
              {
                  throw new ApplicationException(createErrorStringFromException(e));
              }
      
              return foodsList;
          }
      }
      

      来自我的angular JS服务的示例调用使用调用

      $http.get('/api/foods/all')
      

      在我的类中声明了一些其他的CRUD方法,但是所有这些方法都以相同的方式声明,并且为了简洁起见我在上面的代码中省略了这些方法。我一直在使用&#34; all&#34;路线作为我的考验。

      我在设置路由时使用了资源http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-apihttp://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2

1 个答案:

答案 0 :(得分:0)

失败的请求跟踪日志显示IIS正在调用WebDAV来处理请求,这表明请求是使用PUT方法进行的。例如。

禁用WebDAV模块,然后重试。请遵循以下指南:http://www.asp.net/web-api/overview/testing-and-debugging/troubleshooting-http-405-errors-after-publishing-web-api-applications

此QA:ASP.NET Web API - PUT & DELETE Verbs Not Allowed - IIS 8