我正在创建一个属性,以便每当我的网站上发生异常时,我都会收到一封详细说明异常的电子邮件。我到目前为止,但是如果发生异常,我的属性代码似乎不会触发:
public class ReportingAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
// This will generate an email to me
ErrorReporting.GenerateEmail(filterContext.Exception);
}
}
然后在我的控制器上面我正在做:
[ReportingAttribute]
public class AccountController : Controller
另一种方法是将ErrorReporting.GenerateEmail(ex)
放入我的捕获块中?必须有一个更简单的方法吗?这就是为什么我想创建属性来处理这个
答案 0 :(得分:2)
为了记录所有未捕获的异常,您可以在Global.asax.cs
文件中定义以下方法:
private void Application_Error(object sender, EventArgs e)
{
try
{
//
// Try to be as "defensive" as possible, to ensure gathering of max. amount of info.
//
HttpApplication app = (HttpApplication) sender;
if(null != app.Context)
{
HttpContext context = app.Context;
if(null != context.AllErrors)
{
foreach(Exception ex in context.AllErrors)
{
// Log the **ex** or send it via mail.
}
}
context.ClearError();
context.Server.Transfer("~/YourErrorPage");
}
}
catch
{
HttpContext.Current.Response.StatusCode = (int) HttpStatusCode.InternalServerError;
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
}
答案 1 :(得分:1)
Attribute
只是无法定义行为,但它用于对代码数据进行一些标记。您应该编写代码,
答案 2 :(得分:0)
为什么不创建基本控制器:
public ApplicationBaseController : Controller
{
public override void OnException(ExceptionContext context)
{
//Send your e-mail
}
}
从ApplicationBaseController
public HomeController : ApplicationBaseController
{
//.....
}