文章出處
文章列表
如果在 ASP.NET MVC 應用程序中記錄異常信息,我們只需要在 Global.asax 的 Application_Error 中添加代碼就可以了,比如:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Error(object sender, EventArgs e)
{
var lastError = Server.GetLastError();
if (lastError != null)
{
Logger.Default.Error("Application_Error", lastError);
Response.StatusCode = 500;
Server.ClearError();
}
}
}
但這一套在 ASP.NET Web API 中并不適用,其解決方式也不是很麻煩,我們先創建 ExceptionHandlingAttribute(繼承 ExceptionFilterAttribute):
public class ExceptionHandlingAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
var exception = context.Exception;
if (exception != null)
{
Logger.Default.Error("Application_Error", exception);
}
}
}
然后在 WebApiConfig 中注冊下:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
config.Filters.Add(new ExceptionHandlingAttribute());
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
或者我們在 Action 上面添加 ExceptionHandlingAttribute 屬性:
public class ValuesController : ApiController
{
[ExceptionHandlingAttribute]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
如果日志沒有記錄的話,需要在 Global.asax.cs 中的 Application_Start 添加如下代碼:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
....
}
}
參考資料:
文章列表
全站熱搜