繁体   English   中英

ASP.NET MVC路由不适用于IIS 7.5

[英]ASP.NET MVC routing not working with IIS 7.5

我正在使用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。

感谢您的时间。

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

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

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

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

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

},

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM