【问题标题】:IIS7 MVC Routing Not WorkingIIS7 MVC 路由不工作
【发布时间】:2018-02-12 15:04:40
【问题描述】:

我们公司发布了一个基于 MVC 的产品(针对 v4.5),该产品已停止在客户站点上运行,原因似乎是环境问题 - 曾经运行没有问题的构建现在给出了 403.14 - The Web server is configured to not list the contents of this directory。 .

认为正在发生的事情......

  • 用户访问http://server/AppName
  • 因为是 MVC 应用,所以应该使用默认路由 (Reports/Index)。
  • IIS 正在寻找默认文档...
  • ...如果没有找到,它假定用户想要列出目录的内容...
  • ...未启用,因此会引发 403.14。 .

到目前为止我尝试过的...

  • 直接访问路由.. 导致 404 错误。所以我很漂亮 确保 IIS 没有意识到它应该使用路由。
  • 使用aspnet_regiis 向IIS 注册ASP.Net。这是从Framework64 文件夹中完成的,因为...
    • 操作系统是 64 位 - Windows Server 2008(不带 Hyper-V 的标准)
    • IIS 是 64 位的 - 虽然 Enable 32-Bit Applications 是真的
  • Checked AppPool 的目标是框架的 v4 - 确实如此。
  • 将 AppPool 模式更改为 Classic - 很确定它应该被集成,但值得排除它。现在又回到Integrated
  • 确认RunAllManagedModulesForAllRequestsweb.config中设置为true
  • web.config<system.webServer> 部分中定义的已检查权限条件得到满足 - 它们满足。
  • 创建并部署了最简单的 MVC 应用程序 - 同样的问题。
  • 以管理员身份运行命令 shell 使用 aspnet_regiis -ua 取消注册 ASP.Net 并使用 aspnet_regiis -enable -i 重新注册。我们遇到了几个权限问题 - Temporary ASP.NET Files 目录丢失了,但是一旦找到它们,我们又回到了同样的错误。
  • 添加了一个简单的default.htm - 如果存在,它会响应http://server/AppName 请求而提供。

我已经没有什么想法了,所有的谷歌点击都暗示了上述的一些组合 - 或者启用目录浏览(我认为这只是一个症状而不是根本原因)。

另外,不确定它是否相关,但 IIS 中应用程序可用的可配置元素的数量似乎比我预期的要少...

【问题讨论】:

  • 您的应用程序中是否也有一个名为Reports 的文件夹?
  • 好点 - 没有 Reports 文件夹,只有一个 ReportsController。感谢您的建议(并花时间回复)
  • 您是否更改了路由配置或任何 app_data 文件夹中的任何样板配置代码。你能分享那个代码吗?
  • 否 - 没有任何改变。该应用程序是从 MSI 安装的。以前有效,现在无效。此外,该网站是预编译的,因此客户也没有更改它。
  • 道歉 - 当我说“没有任何改变”时,我指的是“路由配置中的样板配置代码”。很明显,有些东西发生了变化,或者它不会停止工作。

标签: asp.net asp.net-mvc asp.net-mvc-4 routes iis-7


【解决方案1】:

您可以尝试使用Enabling 目录浏览。 假设您在 Windows Server 2012 或 Windows Server 2012 R2 下

  1. 在任务栏上,单击服务器管理器。
  2. 在服务器管理器中,单击管理菜单,然后单击添加角色 和功能。
  3. 在“添加角色和功能”向导中,单击“下一步”。选择 安装类型,然后单击下一步。选择目标服务器并 点击下一步。
  4. 在“服务器角色”页面上,展开 Web 服务器 (IIS),展开 Web 服务器,展开通用 HTTP 功能,然后选择目录 浏览。点击下一步。
  5. 在“选择功能”页面上,单击“下一步”。在确认安装 选择页面,单击安装。在结果页面上,单击关闭。

如果您使用的是 Windows PC,请在命令提示符下尝试以下操作:

  1. 转至C:\Program Files\IIS Express
  2. 然后按Enter:appcmd set config /section:system.webServer/directoryBrowse /enabled

【讨论】:

    【解决方案2】:

    您是否检查过运行应用程序池进程的用户?我认为您的网站需要以执行 .net 库的权限运行,而我看到这似乎无缘无故地发生了变化(可能与对系统的过度更新有关)。

    【讨论】:

      【解决方案3】:

      也许这是你的情况https://forums.iis.net/t/1157304.aspx

      SQL Server Reporting Services 通过以下方式创建一个名为 Reports 的文件夹 如果您将其安装在 IIS 上,则为默认值。如果您安装 SQL 2008,那么 Reporting Services 不需要使用 IIS,而是会尝试 使用 HTTP.Sys 服务保留 URL。

      我相信这是您所看到的冲突的原因。你什么 可以尝试更改 Reporting Services 通过 SQL 使用的 URL 服务器配置向导。

      我也发现了

      SQL Server 的报表管理器可以使用报表路径http://<server name>/reports Configure a Native Mode Report Server for Local Administration (SSRS)

      【讨论】:

        【解决方案4】:

        以下是我在Microsoft official site 上找到的一些引用,我认为这可能会有所帮助:

        对于网站管理员

        出现此问题的原因是该网站没有启用目录浏览功能,并且未配置默认文档。要解决此问题,请使用以下方法之一:

        方法一:在 IIS 中启用目录浏览功能(推荐)

        要解决此问题,请按以下步骤操作: 启动 IIS 管理器。为此,请单击“开始”,单击“运行”,键入 inetmgr.exe,然后单击“确定”。 在 IIS 管理器中,展开服务器名称,展开网站,然后单击要修改的网站。 在功能视图中,双击目录浏览。 在“操作”窗格中,单击“启用”。

        方法二:添加默认文档

        要解决此问题,请按以下步骤操作: 启动 IIS 管理器。为此,请单击“开始”,单击“运行”,键入 inetmgr.exe,然后单击“确定”。 在 IIS 管理器中,展开服务器名称,展开网站,然后单击要修改的网站。 在功能视图中,双击默认文档。 在“操作”窗格中,单击启用。 在“文件名”框中,键入默认文档的名称,然后单击“确定”。

        方法 3:在 IIS Express 中启用目录浏览功能

        注意此方法适用于在使用 IIS Express 时遇到问题的 Web 开发人员。

        为此,请按以下步骤操作: 打开命令提示符,然后转到计算机上的 IIS Express 文件夹。例如,在命令提示符下转到以下文件夹: C:\Program Files\IIS Express 键入以下命令,然后按 Enter: appcmd 设置配置 /section:directoryBrowse /enabled:true

        【讨论】:

        • 我不认为我可以更清楚地说明这一点。我 不想 想要启用目录浏览 - 我认为 IIS 默认将我的请求解释为这样,因为它没有使用默认路由 并且 没有名为 default 的文件。 html
        • 您尝试过它推荐的第二种方法吗?我想指出的一件事是“default.htm”只是一个通用名称,表示您希望用户看到的第一页。它也可以被称为任何它曾经的名字,如 index.htm、welcome.htm 等。
        【解决方案5】:

        我认为问题在于尚未安装的 IIS 功能。我在 Windows Pro 中经常遇到这种问题。确保打开 Internet Information Service -> World Wide Services 下的所有功能,因为默认情况下 IIS 配置为使用 WebForms。所以可能有一些功能还没有安装到使用 MVC,尤其是 ISAPI 过滤器。就我而言,这就是解决方案。希望对你有帮助。

        【讨论】:

          【解决方案6】:

          我在使用 VS 2017 和 ASP.NET MVC 时遇到过类似的情况。 长期从事该项目,完全没有问题,但突然路由开始出现异常并停止工作。

          所以我更改了项目属性页面中的端口并开始工作。

          我真的不知道端口和 MVC 路由模块之间的关系是什么。如果这有帮助,其他人可以启发。

          【讨论】:

            【解决方案7】:

            我遇到了同样的问题,我刚刚从 IIS 中的默认网站创建了一个应用程序池,然后停止了默认网站。有了这个区别,您将没有应用程序池的路径

            【讨论】:

              【解决方案8】:

              我知道这个问题已经很久了,但我最近遇到了同样的问题。我已经尝试了每一个配置,就像 @amcdermott 所做的那样,但解决问题的唯一措施是重新安装 .NET Framework

              我的应用是在 .NET Framework 4.5.2 下构建的。应用程序服务器安装了 4.6.1 和 4.5.2 版本。因此,我卸载了所有框架版本并安装了我需要的版本。

              如果您要尝试此解决方案,请确保没有其他应用程序使用高级版本的 .NET Framework。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2018-02-17
                • 1970-01-01
                • 1970-01-01
                • 2011-12-11
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-12-15
                相关资源
                最近更新 更多