ELMAH 过滤编程不起作用
Elmah 总是介入。如何以编程方式过滤: 这是我的全局文件:
/// <summary>
/// Handles the Filtering event of the ErrorLog control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="Elmah.ExceptionFilterEventArgs"/> instance containing the event data.</param>
public void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
Filter(e);
}
/// <summary>
/// Handles the Filtering event of the ErrorMail control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="Elmah.ExceptionFilterEventArgs"/> instance containing the event data.</param>
public void ErrorMail_Filtering(object sender, ExceptionFilterEventArgs e)
{
Filter(e);
}
/// <summary>
/// Filters the specified e.
/// </summary>
/// <param name="e">The <see cref="Elmah.ExceptionFilterEventArgs"/> instance containing the event data.</param>
private void Filter(ExceptionFilterEventArgs e)
{
Exception exception = e.Exception.GetBaseException();
var httpException = exception as HttpException;
if (httpException != null && httpException.GetHttpCode() == 404)
{
e.Dismiss();
}
if (exception is FileNotFoundException ||
exception is HttpRequestValidationException ||
exception is ViewStateException ||
exception is CryptographicException ||
exception is NodeNullException ||
exception is SectionNullException ||
exception is IdentifierNullException ||
exception is AccessForbiddenException ||
exception is HttpException)
{
e.Dismiss();
}
}
/// <summary>
/// Handles the Error event of the Application control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
protected void Application_Error(Object sender, EventArgs e)
{
bool errorObtained = false;
Exception ex = null;
try
{
Exception rawException = Server.GetLastError();
if (rawException != null)
{
errorObtained = true;
if (rawException.InnerException != null)
{
ex = rawException.InnerException;
}
else
{
ex = rawException;
}
}
}
catch
{
}
if (errorObtained && ex != null)
{
if ((HttpContext.Current != null) && (HttpContext.Current.Request != null))
{
if (HttpContext.Current.IsCustomErrorEnabled)
{
Server.Transfer(errorPage, false);
}
}
}
}
Elmah always kick in. How to filter programmatically:
Here is my Global file:
/// <summary>
/// Handles the Filtering event of the ErrorLog control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="Elmah.ExceptionFilterEventArgs"/> instance containing the event data.</param>
public void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
Filter(e);
}
/// <summary>
/// Handles the Filtering event of the ErrorMail control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="Elmah.ExceptionFilterEventArgs"/> instance containing the event data.</param>
public void ErrorMail_Filtering(object sender, ExceptionFilterEventArgs e)
{
Filter(e);
}
/// <summary>
/// Filters the specified e.
/// </summary>
/// <param name="e">The <see cref="Elmah.ExceptionFilterEventArgs"/> instance containing the event data.</param>
private void Filter(ExceptionFilterEventArgs e)
{
Exception exception = e.Exception.GetBaseException();
var httpException = exception as HttpException;
if (httpException != null && httpException.GetHttpCode() == 404)
{
e.Dismiss();
}
if (exception is FileNotFoundException ||
exception is HttpRequestValidationException ||
exception is ViewStateException ||
exception is CryptographicException ||
exception is NodeNullException ||
exception is SectionNullException ||
exception is IdentifierNullException ||
exception is AccessForbiddenException ||
exception is HttpException)
{
e.Dismiss();
}
}
/// <summary>
/// Handles the Error event of the Application control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
protected void Application_Error(Object sender, EventArgs e)
{
bool errorObtained = false;
Exception ex = null;
try
{
Exception rawException = Server.GetLastError();
if (rawException != null)
{
errorObtained = true;
if (rawException.InnerException != null)
{
ex = rawException.InnerException;
}
else
{
ex = rawException;
}
}
}
catch
{
}
if (errorObtained && ex != null)
{
if ((HttpContext.Current != null) && (HttpContext.Current.Request != null))
{
if (HttpContext.Current.IsCustomErrorEnabled)
{
Server.Transfer(errorPage, false);
}
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为您必须将 HttpModule 命名为:
使用上面指定的确切名称
I think you have to name your HttpModules as:
with the exact names specified above