IIS 10托管.NET应用设customErrors Off仍空白页如何获取错误堆栈跟踪
仅通过编辑web.config获取IIS 10 .NET应用完整错误堆栈的方法
仅配置<customErrors mode="Off" />无法显示详细错误,是因为IIS 7及以上版本存在两层独立的错误拦截机制,按以下步骤修改web.config即可,无需服务器管理员权限、无需修改IIS全局配置:
- 开启ASP.NET运行时的调试输出模式
在配置文件的<system.web>节点下补充/修正如下配置,注意不要重复定义已有节点,targetFramework替换为应用实际使用的.NET Framework版本号:
注意:<system.web> <customErrors mode="Off" /> <compilation debug="true" targetFramework="4.8" /> <httpRuntime errorMode="Detailed" targetFramework="4.8" /> </system.web>debug="true"仅用于临时排错,拿到错误信息后务必改回false,避免引发性能损耗和安全风险 - 关闭IIS层的自定义错误拦截
这是本地访问仍显示空白页的核心原因,IIS默认会拦截应用返回的错误响应、替换为自定义错误页甚至空白响应。在<system.webServer>节点下添加如下配置,直接覆盖全局IIS设置:
两个参数缺一不可:<system.webServer> <httpErrors errorMode="Detailed" existingResponse="PassThrough" /> </system.webServer>errorMode="Detailed"强制IIS返回详细错误信息,existingResponse="PassThrough"禁止IIS篡改、替换应用本身输出的错误内容。 - 捕获早于ASP.NET管道的错误
如果错误发生在.NET代码运行之前(比如web.config格式非法、模块/处理程序加载失败、目录权限不足等),补充如下配置可拿到IIS层的详细错误信息:<system.webServer> <httpErrors errorMode="Detailed" existingResponse="PassThrough" /> <asp scriptErrorSentToBrowser="true" /> </system.webServer>
配置保存后,IIS会自动重启对应应用,直接访问出错路径即可看到包含完整堆栈跟踪的错误详情。
如果配置后仍显示空白页,先在应用根目录创建一个写有任意内容的静态test.html文件,访问该文件确认站点基础访问正常,排除应用池未启动、目录权限完全拒绝等底层问题。
内容的提问来源于stack exchange,提问作者Jamo
相关产品推荐
相关产品推荐

