【问题标题】:MVC4 HTTP Error 403.14 - ForbiddenMVC4 HTTP 错误 403.14 - 禁止
【发布时间】:2012-07-10 15:40:35
【问题描述】:

我已经构建了一个 .net4.5 ASP.NET MVC4 Web 应用程序,它在本地运行良好(IIS Express 和开发服务器),但是一旦我将它部署到我的 Web 服务器,它就会抛出 403 错误。我已经在服务器上安装了 .Net 4.5RC,甚至尝试了 aspnet_regiis -i 每个人都建议使用以前版本的 MVC/.Net 来解决问题,但它没有帮助。

有什么想法吗?

编辑: 有关情况的更多信息。服务器是 32 位的,我还有 4 个其他 MVC3 应用程序可以正常工作。只是我的 MVC4 应用程序不工作。

【问题讨论】:

  • 我在创建新的 asp.net 4.5 Web Forms 应用程序时遇到了同样的问题。它在本地运行良好(IIS 7.5),但是当部署到测试服务器(也是 IIS 7.5)时,我的大多数捆绑和缩小的 javascript 和 css 文件都无法加载 404 Not Found。下面关于 runAllManagedModulesForAllRequests 的答案为我解决了这个问题!
  • 我可能已经回答了这个问题:stackoverflow.com/questions/24343788/…

标签: .net asp.net-mvc asp.net-mvc-4 iis http-status-code-403


【解决方案1】:

试试

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

通过

https://serverfault.com/questions/405395/unable-to-get-anything-except-403-from-a-net-4-5-website

【讨论】:

  • 有了它,做了一切,但仍然只有 MVC 4 站点工作。必须有一些其他的技巧才能使它起作用。
  • 这个。毫无乐趣地尝试了所有其他库存解决方案,但这是解决问题的解决方案。
  • 亲爱的朋友,我这样做了,但它不起作用。真的,我正在使用 MVC 4 和 VisualStudio 2012,我的项目直到昨天都运行良好,但是在我的代码中进行了一些常规更改后,默认页面(主页/索引)中出现了这个错误。任何人都可以帮助我吗?..
  • 此修复不适合解决此问题(请参阅 Jason Koopmans 答案中的链接)。更好的是在这里下载相关的修补程序microsoft.com/en-us/download/…
  • @AhmadIbrahim 实际上是解决问题的方法。该修复仅适用于 64 位,问题明确指出 32 位。对于某些配置,RAMMFAR 是最可靠的工作解决方案,如果 CDN 使用得当,它会增加最小的服务器负载。
【解决方案2】:

错误 403.14 是不允许列出目录内容的 HTTP 错误代码。请确保

  1. 您已将网站设置为 IIS 中的应用程序
  2. 您在服务器上安装了 .NET 4.5
  3. 您已将应用程序池设置为运行正确版本的 .NET 框架(即未设置为 .NET 2.0
  4. 您正在应用程序池中使用集成管道
  5. .NET 4.5 实际上是在 IIS 中注册的。有关类似问题/解决方案,请参阅 this post

通常,a 和 d 是围绕 MVC 部署到 IIS 的最大问题

【讨论】:

  • 1.我还没有将网站设置为应用程序。 2. 我安装了 .net 4.5,3. 让我的应用程序池针对正确的框架。 4. 我的池设置为使用经典,将其更改为集成但没有帮助。 5. 我很确定 4.5 已经注册了。
  • @mithun_daa - 如果您还没有将您的网站设置为应用程序,这很容易 -> 右键单击​​虚拟目录/网站并转换为应用程序(或添加应用程序,术语暂时无法理解)
  • 这是 MVC4 特有的东西吗?因为我从来没有将我的 MVC3 项目设置为应用程序,它们工作得很好。
  • 可能是您当时的部署方式 -> 但任何 .NET Web 应用程序都必须设置为 IIS 中的应用程序。但是,如果您只是将这些放在默认网站下,那么它会在默认网站应用程序下运行。确保默认网站的应用程序池配置正确(.NET 4/集成)。在 IIS 中创建虚拟目录/虚拟网站时,您也可以选择将其设置为自己的应用程序。
  • 我可能把你弄糊涂了,但没有一个网站在默认网站下。我在 IIS7 中右键单击“站点”并选择“添加网站”。这就是我一直在做的。
【解决方案3】:

也许...如果您碰巧使用了发布向导(就像我一样)并选择了“发布期间预编译”复选框(就像我一样)并看到相同的症状...

是的,我打了自己的头,但在取消选中此框后,一个看似无关的设置,所有描述的症状在重新部署后都消失了。

希望这可以解决一些问题。

【讨论】:

  • 如果您遇到这种情况,可能的根本原因是生产环境中有不同版本的外部库。我让我的 mvc 应用程序针对第三方 dll 的较新版本和生产服务器中的较旧版本进行编译..
  • 献给奇迹男孩、孩子、奇迹人物、现象、不可阻挡的国王,献给@Brian Kirkpatrick 女士们先生们
【解决方案4】:

Windows-> 开始 -> 打开和关闭寡妇功能

确保在

中选中所需选项

【讨论】:

    【解决方案5】:

    申请前

    runAllManagedModulesForAllRequests="true"/>
    

    请考虑下面的链接,该链接提出了一个不太激进的替代方案。在帖子中,作者对本地 web.config 进行了以下更改:

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

    http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html

    【讨论】:

    • 这才是真正的答案。谢谢!
    【解决方案6】:

    Visual Studio 2012 中有一个 Refactor --> Rename Bug 错误地重命名了我的 RouteConfig.cs 中 url 参数的文字字符串中的“id”值。这会导致在 Windows Server 2012 和 Windows Server 2008 R2 中进行全新且正确的设置时出现 403.14。

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
    

    改为

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{renamed_text}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
    

    【讨论】:

    • 对我来说,我很久以前就发现我可以为name 参数输入null 以避免为每条路线编造一个名称。事实证明,这有时也会导致 403(仅在我们的产品环境中,Win Server 2008 R2 运行 .NET 4.5.1,VS2013 项目中的 MVC 5。为了解决,我为每条路由添加了一个名称。
    【解决方案7】:

    如果您在使用开发服务器进行测试时使用集成管道,然后在您的实时 IIS 7.5 Web 服务器上安装为经典管道模式,您也可以获得 403,我还缺少我的 app_data 文件夹,这也是必需的

    【讨论】:

      【解决方案8】:

      如果您在 Windows 8 或 Server 2012 上运行 IIS 8.5,您可能会发现在虚拟目录中运行 mvc 4/5 (.net 4.5) 不起作用。如果您在主机文件中创建一个本地主机条目以指向您的本地计算机,然后将一个新的本地 IIS 网站指向该文件夹(具有匹配的主机头条目),您会发现它可以工作。

      【讨论】:

      • 为什么要在多个地方张贴same answer
      • 因为我试图找出解决方案,它与两者都有关。免得有人到处打猎。
      • 您不应该发布重复的答案。我只能这么说。
      【解决方案9】:
      <system.webServer>
         <modules runAllManagedModulesForAllRequests="true"/> 
       </system.webServer>
      

      你可以使用上面的代码

      【讨论】:

        【解决方案10】:

        我已将新应用的应用程序池设置为 IIS 中的 DefaultAppPool,这显然是在使用 Classic 管道和 .NET v.2.0

        为了解决这个问题,我使用Integrated 管道和.NET v4.0 创建了一个新的应用程序池。只是为了这个新应用程序,然后一切都开始按预期工作。

        不要忘记将此新应用程序池分配给应用程序。在 IIS 中选择应用程序,单击Basic Settings,然后为该应用程序选择新的应用程序池。

        【讨论】:

          【解决方案11】:

          我最近经常看到的是 IIS,它允许运行 32 位应用程序

          这是你尝试过的。否则我们需要更多关于生产和开发服务器版本的信息

          【讨论】:

          • 对不起,我没有听懂你的意思。这是一个 32 位服务器。我已更新我的帖子以添加更多信息。
          • 啊……他们在不同的 app_pools 中吗?
          • 是的,事实上我的每个网站都有自己的应用程序池。
          【解决方案12】:

          我有一点不同的问题,在服务器 2012 上,不知何故我忘记启用 asp.net 4.5,所以如果你有这个问题,请仔细检查你是否启用它。

          【讨论】:

            【解决方案13】:

            我在 Azure 和 ASP.NET 4.5、IIS 8 上运行 Windows Server 2012 R2

            我通过卸载程序和功能中的所有 ASP.NET 项目解决了这个问题,然后使用服务器管理器使用添加角色和功能重新安装 ASP.NET:选择基于角色或基于功能的安装,选择我的服务器,然后对于 Select Server Role 选择 Web Server (IIS)/Web Server/Application Development,然后单击 ASP.NET 4.5,确认安装了先决条件,然后重新安装了 ASP.NET 4.5。

            我以前的搜索使我相信问题实际上源于 ASP.NET 的注册问题。对于早期版本的 ASP.NET,实际上有一个实用程序可以运行来注册 ASP.NET 而无需重新安装,但它似乎不再可用。

            【讨论】:

              【解决方案14】:

              我解决了打开 Visual Studio、扩展引用并将属性“Copy Local”更改为“True”的问题。

              我发现将旧版本的 dll 与我的新版本的 dll 进行比较(这不起作用)

              【讨论】:

                【解决方案15】:

                就我而言,我的应用程序的默认页面是 index.html,默认文档选项中缺少该页面。添加它修复了 403.14 Forbidden 错误。

                【讨论】:

                  【解决方案16】:

                  在我的情况下,问题是由自定义 ActionFilterAttribute 引起的,它是一种全局过滤器属性。该属性通过 Autofac 实例化了一个服务,但该服务在构造函数中崩溃了:

                  public ActionFilterAttribute()
                  {
                      _service = ContainerManager.Resolve<IService>();
                  }
                  
                  public class Service: IService
                  { 
                      public Service()
                      {
                          throw new Exception('Oops!');
                      }
                  }
                  

                  【讨论】:

                    【解决方案17】:

                    在我的情况下,Windows 功能和aspnet_regiis -i 都没有完成这项工作。经过数小时的互联网挖掘,我提出了自己的解决方案:

                    1. 在模块的 IIS 管理器中,我在 UrlRoutingModule-4.0 节点中将继承更改为本地:

                    2. 在 web.config 中,我粘贴了来自该论坛的一些提示:

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

                    希望对你有帮助

                    【讨论】:

                      【解决方案18】:

                      要么我无意中将我的应用程序池 .NET CLR 版本更改为:无托管代码,要么当我为部署在同一台服务器上的新 .NET 5 Web 应用程序更改应用程序池时,它被更改了。

                      将我的应用程序池 .NET CLR 版本改回:.NET CLR 版本 v4.0.30319 解决了该问题。

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2014-07-29
                        • 1970-01-01
                        • 1970-01-01
                        • 2013-08-17
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多