-
Web アプリでの未処理例外ハンドルの方法
https://www.c-sharpcorner.com/article/exception-handling-in-asp-net-web-api/ を参考に- コントローラ処理の未処理例外にはExceptionFilterを使用する。
- ExceptionFilterAttribute の派生クラスを作成する。
- 作成した派生クラスを使用するよう、Configurationに登録する
- ExceptionFilterでキャッチできない例外にはExceptionHandlerを使用する。
- ExceptionHandler の派生クラスを作成する。
- 作成した派生クラスを使用するよう、Configurationに登録する
- コントローラ処理の未処理例外にはExceptionFilterを使用する。
サンプル
public class CustomExceptionFilter : ExceptionFilterAttribute
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
string exceptionMessage = string.Empty;
if (actionExecutedContext.Exception.InnerException == null)
{
exceptionMessage = actionExecutedContext.Exception.Message;
}
else
{
exceptionMessage = actionExecutedContext.Exception.InnerException.Message;
}
// Logging(exceptionMessage);
}
}
public class CustomExceptionHandler: ExceptionHandler
{
public async override Task HandleAsync(ExceptionHandlerContext context, CancellationToken cancellationToken)
{
// Logging(context.Exception);
}
}
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
// 例外ハンドラの登録
GlobalConfiguration.Configuration.Filters.Add(new CustomExceptionFilter());
GlobalConfiguration.Configuration.Services.Replace(typeof(IExceptionHandler), new CustomExceptionHandler());
}
}