【问题标题】:ASP.NET MVC routing not working with IIS 7.5ASP.NET MVC 路由不适用于 IIS 7.5
【发布时间】:2015-11-26 23:24:27
【问题描述】:

我正在开发一个 ASP.NET MVC Web 应用程序。该应用程序在开发服务器上完美运行,所有路由(扩展较少)都运行良好。但是在尝试将此应用程序部署到 IIS 7.5 后,问题就出现了。

加载的唯一页面是索引,之后的所有内容都只是 404(来自 IIS)。我发现如果我在 URL 的末尾添加一个点 (.),则错误不再来自 IIS,而是来自 ASP,所以我的猜测是 IIS 没有正确解释扩展少的路由。

这是我尝试过的事情的清单:

  • 使用 Microsoft 修补程序 (http://support.microsoft.com/kb/980368),但它只是说它不适用(我有 Windows 7 S1)
  • 添加到 Web.config <modules runAllManagedModulesForAllRequests="true" />
  • 添加 <modules> <remove name="UrlRoutingModule-4.0" /> <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" /> </modules>
  • 集成模式和经典模式下运行 IIS。
  • 通配符脚本映射添加到 IIS。
  • 确保所有 IIS 功能均已启用。
  • 尝试了 Visual Studio 08 中的 Published 应用以及常规项目的复制和粘贴。
  • 确保 Global.asax 在文件夹中。

这是我当前的 Global.asax:

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {




        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "User", action = "LogIn", id = UrlParameter.Optional } // Parameter defaults
        );

        routes.MapRoute(
          "Root",
          "",
          new { controller = "Home", action = "Index", id = "" }
        );



    }

    protected void Application_Start()
    {

        AreaRegistration.RegisterAllAreas();

        RegisterRoutes(RouteTable.Routes);

    }
}

这是我的 Web.config 的一部分:

    <system.web>
    <httpHandlers>
      <add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
        validate="false" />
    </httpHandlers>
    <authentication mode="Windows" />
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
        <add assembly="Microsoft.ReportViewer.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
        <add assembly="Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
        <add assembly="System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
      </assemblies>
      <buildProviders>
        <add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
      </buildProviders>
    </compilation>
    <httpRuntime maxUrlLength="10999" maxQueryStringLength="2097151" />
    <pages>
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxUrl="10999" maxQueryString="2097151" />
      </requestFiltering>
    </security>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
      <add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </handlers>
  </system.webServer>

此时我非常绝望,因为我已经浪费了将近 3 天的时间,而我目前唯一可能的解决方案似乎是将代码重写为常规的 ASP.NET Web 应用程序,而不是 MVC。

感谢您的宝贵时间。

【问题讨论】:

  • 试过用 IIS (aspnet_regiis.exe) 注册正确的 asp.net 版本吗?
  • 是的,ASP.NET 4.0 已安装,但也没有用:(
  • 我找不到问题的解决方案,所以我不得不将页面重写为普通的 ASP.NET 网页,幸好它不是一个很大的页面。如果我知道使用 ASP.NET MVC 应用程序设置 IIS 7.5 会非常痛苦,我会坚持使用常规的 ASP.NET。感谢所有试图提供帮助的人。
  • 是的,IIS 和 MVC 是一场真正的噩梦。我花了同样多的时间来处理你遇到的问题,但无济于事。

标签: asp.net asp.net-mvc iis-7.5 http-status-code-404 asp.net-mvc-routing


【解决方案1】:

可能有很多东西,但我的第一个猜测是检查你的地图路线声明。

只需将其保留在您的 RegisterRoute 语句中,看看是否可以解决它。

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

【讨论】:

  • 我删除了该声明并且它有效。当我将它保存在路由属性中时停止工作
【解决方案2】:

我通过在 project.json 中添加这行来解决这个问题

"publishOptions": {
"include": [
  "wwwroot",
  "Views",
  "appsettings.json",
  "web.config"
]

},

【讨论】:

  • 我的问题是一样的——我从一个特殊的文件夹中提取了一些 html,并且发布的站点看起来没有使用特定的路由——但问题是在幕后发布的网站没有包含我视图所需的文件夹。在 json 的“包含”中添加它的名称解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 1970-01-01
  • 2019-12-11
  • 2014-11-15
  • 2020-09-01
相关资源
最近更新 更多