ASP.NET Core Web APIプロジェクトでルーティングエラーをキャッチしようとしています。私は持っているコントローラで :ASP.NET Core Web API:ルーティングエラーをキャッチする
エラーをルーティングすることによって、具体的には、私は、例えば平均
// GET api/values/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
しかし、要求がある:
api/values/5/6
404が自動的に返され、私はコードでこれを処理できるようにしたいと考えています(つまり、何らかの例外処理ルーチンを呼び出す)。
私は成功せずに3つの異なるアプローチしようとしている:ConfigureServices(IServiceCollectionサービス)で
を、私が追加:
services.AddMvc(config =>
{
config.Filters.Add(typeof(CustomExceptionFilter));
});
を私は投げを置く場合、これはコントローラ内で発生するエラー(例えばを取り込み( )を上記のGet(id)メソッドで使用します)。ただし、ルーティングエラーは発生しません。これは、エラーがミドルウェアのパイプラインを伝播するように、一致するコントローラメソッドが見つからなかったためです。さらに、私が試したパイプラインアップエラーを処理しようとする試みで
...
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseExceptionHandler(
options =>
{
options.Run(
async context =>
{
var ex = context.Features.Get<IExceptionHandlerFeature>();
// handle exception here
});
});
app.UseApplicationInsightsRequestTelemetry();
app.UseApplicationInsightsExceptionTelemetry();
app.UseMvc();
}
私も試してみました:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.Use(async (ctx, next) =>
{
try
{
await next();
}
catch (Exception ex)
{
// handle exception here
}
});
app.UseApplicationInsightsRequestTelemetry();
app.UseApplicationInsightsExceptionTelemetry();
app.UseMvc();
}
どちらも上記のは、ルーティングエラーが発生したときに呼び出されるように見えます。私は間違ったアプローチをしていますか?あるいは、これらのアプローチの1つが実際に機能するかどうか?
本当にありがとうございます。
おかげ
クリス
PS。私はASP.NET Web APIには比較的新しいので、間違った言葉を少し使っているかもしれません。
おかげで、私は、可能な場合に例外を捕捉することを好むだろう - これは可能ですか?ここでのアプローチは、問題が発生したときに例外をキャプチャするのではなく、イベント後の結果をキャプチャするような感じです。 – cbailiss
なぜ404結果の例外が必要ですか? –
例外を使用したい場合でも、私の更新を参照してください。 –