Unityは、ASP.NETアプリケーションのエラー応答をカスタマイズするためのツールではありません。これはDependency Injectionコンテナであり、必要なすべての依存関係を持つコントローラをインスタンス化するだけです。それをアプリケーションロジックと混在させるのは悪い考えです(エラーレスポンスのカスタマイズも確かにその一部です)。
ASP.NET MVCとASP.NET Web APIは、必要なもの、つまり例外フィルタに適した拡張ポイントを提供します。以下は、ASP.NET Web APIのサンプルです。
public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
// Add your exception handling here
// Check context.Exception and decide whether you need to handle it
if (context.Exception is SqlException)
{
var controllerType = context.ActionContext.ControllerContext.Controller.GetType();
if (controllerType == typeof(UserController))
{
context.Response = new HttpResponseMessage(HttpStatusCode.Conflict)
{
Content = new StringContent("User already exists")
};
}
else
{
// Cover other controller types here
}
}
}
}
ご覧のとおり、実装はかなり簡単です。 OnException()
メソッドの中には、コントローラとアクションのコンテキストを持つ例外自体にアクセスすることができます。 ロジックでこのコントローラのアクションに対してこの例外を処理する必要がある場合は、適切なHttpResponseMessage
でcontext.Response
と入力し、HTTPステータスコードと本文を選択します。
あなたのWebApiConfig.Register(HttpConfiguration config)
またはコントローラレベルの中
GlobalConfiguration.Configuration.Filters.Add(new CustomExceptionFilterAttribute());
でグローバルな例外フィルタを適用することができます。
[CustomExceptionFilter]
public class UserController : ApiController
実装は、ASP.NET MVCのために非常に似ています。その場合、フィルタにSystem.Web.Mvc.IExceptionFilter
を実装する必要があります。