部署.NET Framework 4.8的ASP.NET MVC至IIS遇多类错误求助
解决ASP.NET MVC 4.8部署IIS的403.14与500.21错误及EF数据库配置
一、修复HTTP Error 403.14 - Forbidden
- 确认IIS站点的默认文档包含
Default.aspx或Index.cshtml(MVC默认路由的首页)。操作路径:IIS管理器 → 站点 → 功能视图 → 默认文档 → 添加对应文件名。 - 确保ASP.NET MVC路由规则生效:检查站点根目录下的
web.config是否包含正确的路由配置,确认System.Web.Routing模块已启用:<system.webServer> <modules runAllManagedModulesForAllRequests="true"> <remove name="UrlRoutingModule-4.0" /> <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" /> </modules> </system.webServer> - 禁用目录浏览:启用目录浏览只是临时方案,解决路由问题后必须关闭,避免安全风险。
二、修复HTTP Error 500.21 - Handler "BlockViewHandler"错误
这个错误是ASP.NET集成管道配置异常或.NET Framework未正确注册到IIS导致的,按以下步骤处理:
- 重新注册.NET Framework 4.8到IIS:以管理员身份打开命令提示符,执行:
64位系统额外执行:%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i - 检查应用程序池配置:确保站点对应的应用程序池,.NET CLR版本设置为
.NET Framework v4.0.30319,托管管道模式设为集成(不要选经典)。 - 验证Views文件夹的
web.config:确保阻止直接访问视图的配置未被篡改,正确配置如下:<system.webServer> <handlers> <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> </handlers> </system.webServer>
三、带Entity Framework的MVC应用部署配置
添加EF后出现故障,重点检查以下几项:
- 数据库连接字符串:把
web.config里的连接字符串改成生产环境的,别用本地开发的SQL实例。示例:<connectionStrings> <add name="YourDbContext" connectionString="Data Source=PROD-SQL;Initial Catalog=YourDatabase;User ID=DbUser;Password=YourPassword;" providerName="System.Data.SqlClient" /> </connectionStrings> - 数据库权限:确保应用程序池身份(或配置的数据库用户)有目标数据库的读写权限。如果用应用程序池身份,要在SQL Server里给
IIS APPPOOL\你的应用程序池名称创建登录名,再分配对应数据库的权限。 - 执行EF迁移脚本:如果用Code First迁移,部署前先在开发环境生成迁移脚本,再到生产数据库执行,保证数据库结构和代码一致。生成脚本的命令:
把生成的SQL脚本拿到生产SQL Server里运行即可。Update-Database -Script -SourceMigration:0 - 验证EF配置:确认
web.config里的EF配置正确,示例:<entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework>
四、最终验证
- 重启IIS站点和对应的应用程序池。
- 访问站点首页,确认路由能正常加载控制器的Action。
- 测试数据库相关功能(比如查询、提交数据),确保连接和权限都没问题。
内容的提问来源于stack exchange,提问作者Nora
相关产品推荐
相关产品推荐

