有没有办法以编程方式检查ASP.NET应用程序的CustomErrors是否设置为Off?

wil*_*lem 22 asp.net

我们通常在Global.asax中捕获未处理的异常,然后我们重定向到一个友好的友好错误页面.这对于Live环境来说很好,但在我们的开发环境中,我们想检查CustomErrors是否为Off,如果是,则抛出丑陋的错误.

有没有一种简单的方法来检查CustomErrors是否通过代码关闭?

kap*_*tan 35

我建议使用以下属性:

HttpContext.Current.IsCustomErrorEnabled
Run Code Online (Sandbox Code Playgroud)

正如这里提到的,IsCustomErrorEnabled会考虑更多像RemoteOnly这样的东西:

IsCustomErrorEnabled属性组合了三个值,以告诉您是否为特定请求启用了自定义错误.这不像读取web.config文件来检查该部分那么简单.在幕后还有更多内容可以真正确定是否启用了自定义错误.

该属性查看这三个值:

  1. web.config的<deployment>部分的零售属性.在将应用程序部署到生产服务器时,这是一个有用的属性.这会覆盖自定义错误的任何其他设置.

  2. web.config的<customErrors>部分的mode属性.此设置指示是否根本启用自定义错误,如果是,则指示是否仅为远程请求启用它们.

  3. HttpRequest对象的IsLocal属性.如果仅为远程请求启用了自定义错误,则需要知道该请求是否来自远程计算机.


djd*_*d87 12

通过,通过WebConfigurationManager:

System.Configuration.Configuration configuration =
    System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/");

System.Web.Configuration.CustomErrorsSection section =
    (CustomErrorsSection)configuration.GetSection("system.web/customErrors");
Run Code Online (Sandbox Code Playgroud)

获得该部分后,您可以按如下方式检查模式是打开还是关闭:

CustomErrorsMode mode = section.Mode;
if (mode == CustomErrorsMode.Off)
{
    // Do something
}
Run Code Online (Sandbox Code Playgroud)