【发布时间】: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