您可以使用 IExceptionFilter 接口来捕获所有错误。这是示例。我有自定义日志记录。所以你可以自定义它。
using System;
using System.Diagnostics;
using System.Web.Mvc;
namespace ProjectName.Helpers
{
public class ExceptionFilter : IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
Trace.TraceError(filterContext.Exception.ToString());
if (filterContext.Exception.InnerException != null)
{
Trace.TraceError(filterContext.Exception.InnerException.ToString());
}
var st = new StackTrace(filterContext.Exception, true);
var frame = st.GetFrame(0);
var lineNumber = frame.GetFileLineNumber();
var log = new LogObj
{
DateInserted = DateTime.Now,
LogType = LogType.Exception,
Controller = filterContext.RouteData != null ? (string)filterContext.RouteData.Values["controller"] : "",
Action = filterContext.RouteData != null ? (string)filterContext.RouteData.Values["action"] : "",
RouteDataId = filterContext.RouteData != null ? (string)filterContext.RouteData.Values["id"] : "",
Message = filterContext.Exception.ToString(),
ExceptionMessage = filterContext.Exception.Message,
InnerExceptionMessage = filterContext.Exception.InnerException != null ? filterContext.Exception.InnerException.ToString() : "",
InnerExceptionSource = filterContext.Exception.Source,
InnerExceptionStackTrace = filterContext.Exception.StackTrace,
ExceptionDetails = "File: " + frame.GetFileName() + " - Line: " + lineNumber
};
LogHelper.WriteLog(LogTarget.Exception, log);
}
}
}
并且您需要在 App_Start/FilterConfig.cs 上注册此过滤器。
using System.Web.Mvc;
namespace MailBulletin
{
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new ExceptionFilter());
}
}
}