参考
miso-soup3.hateblo.jp
サンプル
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Filters.Add(new GlobalExceptionFilterAttribute());
config.Services.Add(typeof(IExceptionLogger), new GlobalExceptionLogger());
config.Services.Replace(typeof(IExceptionHandler), new GlobalExceptionHandler());
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
public class GlobalExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
TODO
base.OnException(actionExecutedContext);
}
}
public class GlobalExceptionHandler : ExceptionHandler
{
TODO
public override void Handle(ExceptionHandlerContext context)
{
Debug.WriteLine(String.Format("★呼び出し {0} - {1}",
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName,
System.Reflection.MethodBase.GetCurrentMethod().Name));
HttpRequestMessage request = context.Request;
Exception ex = context.Exception;
var error = new { status=(int)HttpStatusCode.OK, msg = "errorです" };
context.Result = new ResponseMessageResult(
request.CreateResponse(HttpStatusCode.InternalServerError,
error));
}
}
public class GlobalExceptionLogger : ExceptionLogger
{
TODO
public override void Log(ExceptionLoggerContext context)
{
Debug.WriteLine(String.Format("★呼び出し {0} - {1}",
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName,
System.Reflection.MethodBase.GetCurrentMethod().Name));
Exception ex = context.Exception;
Debug.WriteLine("例外発生");
Debug.WriteLine("Method : " + context.Request.Method);
Debug.WriteLine("Url : " + context.Request.RequestUri);
Debug.WriteLine("Exception : " + context.Exception);
}
}