[解決済み] ASP.NET Web Apiで処理されない例外をすべてキャッチする
2022-08-02 07:31:31
質問
どのようにすれば をすべて をキャッチし、ログを取ることができますか?
今のところ、私は試してみました。
-
を作成し、登録します。
ExceptionHandlingAttribute
-
を実装します。
Application_Error
メソッドをGlobal.asax.cs
-
にサブスクライブする
AppDomain.CurrentDomain.UnhandledException
-
登録先
TaskScheduler.UnobservedTaskException
は
ExceptionHandlingAttribute
は、コントローラのアクションメソッドやアクションフィルタ内でスローされる例外を正常に処理しますが、それ以外の例外は処理されないなどの問題があります。
-
を実行した際にスローされる例外。
IQueryable
の実行に失敗したときにスローされる例外です。 -
メッセージハンドラによって投げられた例外 (すなわち
HttpConfiguration.MessageHandlers
) - コントローラのインスタンスを作成する際に発生する例外
基本的に、例外によってクライアントに500 Internal Server Errorが返されるようであれば、それをログに記録してほしいのです。実装方法
Application_Error
を実装することで、Web FormsとMVCでこの仕事をうまくこなせました。Web Apiでは何を使えばいいのでしょうか?
どのように解決するのですか?
これは、WebAPI 2.1 で可能になりました ( 新機能 ):
IExceptionLogger の実装を一つ以上作成します。例えば
public class TraceExceptionLogger : ExceptionLogger
{
public override void Log(ExceptionLoggerContext context)
{
Trace.TraceError(context.ExceptionContext.Exception.ToString());
}
}
そして、アプリケーションのHttpConfigurationに登録し、configコールバックの中で以下のように記述します。
config.Services.Add(typeof(IExceptionLogger), new TraceExceptionLogger());
または直接
GlobalConfiguration.Configuration.Services.Add(typeof(IExceptionLogger), new TraceExceptionLogger());
関連
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み] 複数の例外を一度にキャッチする?
-
[解決済み] Chromeを使用してASP.NET Web APIがXMLの代わりにJSONを返すようにするにはどうすればよいですか?
-
[解決済み] ASP.NET Web APIに整数の配列を渡しますか?
-
[解決済み] ASP.NET Web APIでエラーを返すためのベストプラクティス
-
[解決済み] ASP.NET Core Web APIの例外処理
-
[解決済み] C# MVC4 WebAPIアプリのすべての例外をグローバルに記録するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C#で四捨五入する方法
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】「...は'型'であり、与えられたコンテキストでは有効ではありません」を解決するにはどうすればよいですか?(C#)
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。