本地IIS运行ASP MVC安卓服务端项目遇配置异常求助
解决ASP.NET MVC项目在本地IIS运行时路由失效的问题
我之前切换IIS Express到本地IIS时也碰到过完全一样的问题,结合你的环境(IIS10 + .NET4.5.2),给你拆解原因和靠谱的解决方案:
问题根源
IIS Express默认会把所有请求都交给ASP.NET托管模块处理,所以MVC的无后缀路由能正常工作;但本地IIS默认只处理.aspx这类特定后缀的请求,你的MVC路由(比如/Home/Index)因为没有后缀,会被当成静态文件或目录请求,就出现了“无默认文档/目录浏览”的提示。而你尝试添加的runAllManagedModulesForAllRequests="true"配置,在IIS10里默认是服务器级锁定的(父级配置overrideModeDefault="Deny"),所以直接在站点的web.config里加会报错。
解决方案(按推荐度排序)
方案1:无需修改服务器配置,添加MVC请求处理程序(最推荐)
不需要动服务器级的锁定配置,直接在站点的web.config的<system.webServer>节点下添加针对所有请求的MVC处理程序,让IIS把所有请求交给ASP.NET MVC处理:
如果你的应用池是集成模式(推荐使用这个模式),添加这段配置:
<system.webServer> <!-- 保留已有配置 --> <handlers> <add name="MvcHandler-Integrated" path="*" verb="*" type="System.Web.Mvc.MvcHttpHandler" preCondition="integratedMode" /> </handlers> </system.webServer>
如果你的应用池是经典模式(不推荐,但如果必须用),用这段:
<system.webServer> <!-- 保留已有配置 --> <handlers> <add name="MvcHandler-Classic" path="*" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv4.0,bitness32" /> </handlers> </system.webServer>
添加后重启站点,MVC的路由应该就能正常触发了。
方案2:解除服务器级的配置锁定(仅适合自己的开发机器)
如果你有服务器的管理权限(比如本地开发机),可以修改IIS的服务器级配置,允许站点web.config修改modules节点:
- 打开IIS管理器,点击最顶部的服务器节点(不是你的站点)
- 在功能视图里找到并双击「配置编辑器」
- 在「节」下拉菜单中选择
system.webServer/modules - 找到右侧的
overrideModeDefault属性,把它从Deny改为Allow - 点击「应用」保存配置,然后重启IIS
- 现在你之前添加的
<modules runAllManagedModulesForAllRequests="true" />就能正常生效了
额外排查点
- 确认你的应用池设置正确:.NET CLR版本选择
.NET Framework v4.0.30319,模式对应你上面选的集成/经典 - 检查
RouteConfig.cs里的默认路由是否配置正确:
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); }
- 确保站点的物理路径指向项目的正确输出目录,
bin和Views文件夹都在该路径下 - 检查应用池的运行身份是否有足够的权限访问站点目录
内容的提问来源于stack exchange,提问作者Reza Y
相关产品推荐
相关产品推荐

