用ExceptionFilterAttribute来做异常日志的记录,方便定位查找问题原因。
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Filters.Add(new Filters.ApiSecurityFilter());
config.Filters.Add(new Filters.ApplicationError());//错误日志的过滤器
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
public class ApplicationError : ExceptionFilterAttribute
{
#region IExceptionFilter 成员
private static readonly object obj = new object();
public override void OnException(HttpActionExecutedContext filterContext)
{
lock (obj)
{
var httpContext = filterContext;
// 在出现未处理的错误时运行的代码
if (!filterContext.Request.RequestUri.ToString().Contains("."))
{
string logText = "\r\n------------- 异常信息 ---------------------------------------------------------------";
logText += "\r\n发生时间:" + DateTime.Now.ToString();
logText += "\r\n发生异常页:" + httpContext.Request.RequestUri.ToString();
logText += "\r\n异常信息:" + filterContext.Exception.Message;
logText += "\r\n错误源:" + filterContext.Exception.Source;
logText += "\r\n堆栈信息:" + filterContext.Exception.StackTrace;
logText += "\r\n-----------------------------------------------------------------------------------------\r\n";
//日志物理路径
string path = System.Web.Hosting.HostingEnvironment.MapPath("~/Log/");
WebLog.WriteLog(logText, path);
}
}
}
#endregion
}