我如何通过程序确定 ELMAH 是否已启用?
我如何通过程序确定 ELMAH 是否已启用?
foreach (var m in Application.Modules) {
if (m is Elmah.ErrorlogModule) {
// ...
}
}
不确定。尚未尝试过。
因为:
ELMAH可以动态地添加到正在运行的ASP.NET Web应用程序,甚至是机器上的所有ASP.NET Web应用程序,而无需重新编译或重新部署。
所以您不需要检测它是否存在。只需编写记录代码,就好像它已经存在一样,如果不存在,则不会记录任何内容。
感兴趣吗?:如何让ELMAH与ASP.NET MVC [HandleError]属性一起工作?(接受答案的人是ELMAH的作者)
根据Tadas的回答,我想出了以下代码,适用于我(请注意,我已经将其从VB翻译过来,但没有检查它是否可以编译,所以可能会有所不同):
bool foundElmah = false;
foreach (var m in HttpContext.Current.ApplicationInstance.Modules) {
var module = HttpContext.Current.ApplicationInstance.Modules.Item(m);
if (module is Elmah.ErrorLogModule || module is Elmah.ErrorMailModule || module is Elmah.ErrorFilterModule || module is Elmah.ErrorTweetModule) {
foundElmah = true;
break;
}
}
if (foundElmah) {
// do something here, like populate the application cache so you don't have to run this code every time
return true;
} else {
// store in application cache, etc.
return false;
}
这也解决了我在请求elmah.axd时遇到的401响应问题(我使用的是Windows身份验证),而且速度更快,不会假定elmah.axd的特定位置。