前回のチュートリアルでは、Web API でのフィルターの開発と使用について紹介しました ExceptionFilter について話したときに、落とし穴がありました。それは、ExceptionFilter は、Action の実行中に発生する例外のみをインターセプトして処理できるということです。アクション、例外が発生した場合、ExceptionFilter は無力です。
これらの例外には以下が含まれます: 1. コントローラー構築メソッドの例外 2. MessageHandler の例外 3. ルーティングプロセスの例外 4. シリアル化/逆シリアル化プロセスの本体 発生する例外 ExceptionFilter は、ApiControler が正常にインスタンス化された後、および Action の実行中に発生する例外のみを解決できることがわかります。この問題を解決するために、ExceptionFilter に加えて、2 つの例外レコードも WEB API 処理拡張ポイントに導入されています。 IExceptionLogger と IExceptionHandler。 Aut Out Out Out AuttromancePsumbletherecement Basion fight nimb nigh out onime night Out night Out night on not now of to now out's '' '' '' '' '' '' '' '' -to-a-points は に戻ります。 Web API フレームワークのライフ サイクルでは、リクエスト サイクルでキャッチまたは処理されなかった例外は、まず例外ログ記録のために例外ログ パイプラインに入ります。複数の IExceptionLogger インスタンスを Web に登録できます。担当する API が異なる例外処理。 IExceptionHandler は、例外処理コンポーネントとして、例外発生後の処理を担当します。これは、IExceptionLogger コンポーネントが記録を完了し、例外処理に関連する ExceptoinFilter が存在しない場合に実行されます。 Web API では、例外処理用の ExceptionHandler が 1 つだけ存在します。 I Web API フレームワークでは、ExceptionLogger と ExceptionHandler という 2 つの基本クラスが作成されます。ExceptionLogger の基本クラスを使用すると、同じ ExceptionLogger インスタンスが繰り返し記録されます (たとえば、後続の例外がスローされた場合など)。パイプライン、または同じ ExceptionLogger オブジェクトが誤って 2 回登録された場合、記録が繰り返される可能性があります) ShouldLog メソッドをオーバーライドし、独自の例外レコード判定ロジックを追加して、さまざまなシナリオに対して異なる ExceptionLogger 呼び出しを行うこともできます。興味があれば、ExceptionLogger 基本クラスを逆コンパイルして、非常に興味深い手法である表示インターフェイスの実装を使用していることを確認してください。 ExceptionLogger の使用例を見てみましょう:public class ErroLogger : ExceptionLogger { public async Task LogAsync(ExceptionLoggerContext context, CancellationToken cancellationToken) { var sb = new StringBuilder(); //获取Log组件 ILogger log = LogManager.GetCurrentClassLogger(); var request = context.Request; sb.AppendLine("URL:"); //获取URL var url = request.RequestUri.ToString(); sb.AppendLine(url); log.Error(context.Exception,sb.ToString(),""); } public override bool ShouldLog(ExceptionLoggerContext context) { return context.Exception is DemoException && base.ShouldLog(context); } }
この例では、この ExceptionLogger が DemoException 型の例外のみを記録するように ShouldLog を書き直し、また、基本クラスのメソッドを呼び出して、それが記録されないことを確認します。同じ例外が繰り返しログに記録されます。 LogAsync メソッドでは、Log コンポーネントを介して例外の原因となった要求 URL を記録し、例外情報も記録しました。
次に、このコンポーネントを登録する必要があります。
config.Services.Add(typeof(IExceptionLogger),new ErroLogger());
を書き込みます。このようにして、DemoException の例外記録コンポーネントが開発され、登録されます。 Web API 実行パイプラインで未処理の DemoException が発生すると、それを記録するためにコンポーネントが呼び出されます。
次に、ExceptionHandler を作成します。Web API フレームワーク全体で、ExceptionHandler は ExceptionLogger と同様に ExceptionHandler 基本クラスを継承して、例外処理を簡素化することができます。例外は、パイプライン内の他のリンクによって繰り返しスローされた例外を繰り返し処理しないように処理する必要があります。例も提供します:
public class ErrorHandler : ExceptionHandler { public override async Task HandleAsync(ExceptionHandlerContext context, CancellationToken cancellationToken) { if (context.Exception is DemoException) { context.Result = new ResponseMessageResult(context.Request.CreateResponse(HttpStatusCode.BadRequest,new {Message=context.Exception.Message})); } else { context.Result = new ResponseMessageResult(context.Request.CreateResponse(HttpStatusCode.InternalServerError,new {Message = "服务器已被外星人绑架"})); } } }
この例では、例外のタイプを決定し、異なる例外に基づいて異なる応答内容と異なる HTTP ステータス コードをクライアントに返します。
次に、この例外処理モジュールを構成に登録し、App_Start/WebApiConfig.cs ファイルの Register メソッドに
config.Services.Replace(typeof(IExceptionHandler),new ErrorHandler());
を書き込みます。これにより、システムのデフォルトの ExceptionHandler が置き換えられ、カスタム ハンドラーを使用して例外を処理できます。処理済みです。
例外の記録と処理のプロセス中に、このパラメータを使用して現在のリクエストのコンテキストを取得したり、リクエストやレスポンスを取得したりすることができます (空になる場合もあるので注意してください)。例外をキャプチャする catch ブロック情報やその他のコンテンツをキャプチャすると、この情報を使用して例外をより適切に説明、記録、処理することができます。
この時点で、ExceptionLogger コンポーネントと ExceptionHandler コンポーネントの簡単な開発が完了しました。開発プロセス中に、ExceptionLogger がグローバル例外記録を担当し、Web API フレームワーク パイプラインで発生する未処理の例外をキャプチャして記録することがわかります。 ExceptionHandler と ExceptionFilter の機能は重複しています。どのような場合に ExceptionHandler を使用し、どのような場合に ExceptionFilter を使用するのでしょうか? 2 つの違いを次の表に示します。
コントローラー | 、アクション |
グローバル |
インスタンス数 |
無制限 世界的にユニークな |
|
fulterLoadingを成功させた後、上記の表から、処理粒度がコントローラーと同じくらい詳細である場合、アクション レベルの ExceptionFilter は、すでに特定のアクションを正確に特定できるため、現在のアクションに対してカスタマイズされた開発を行うことができます。 ExceptionHandler のスコープは ExceptionFilter のスコープよりもはるかに大きく、グローバルな状況を処理する上でより多くの利点があります。 Web API の例外処理について説明します。記事に間違いや質問がある場合は、ご指摘ください。 |
以上がAsp.Net Web API 例外処理エクスペリエンスの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

C#.NETの利点には以下が含まれます。1)非同期プログラミングなどの言語機能により、開発が簡素化されます。 2)パフォーマンスと信頼性、JITコンピレーションとゴミ収集メカニズムによる効率の向上。 3)クロスプラットフォームサポート、.NetCoreはアプリケーションシナリオを拡張します。 4)Webからデスクトップ、ゲーム開発までの優れたパフォーマンスを備えた幅広い実用的なアプリケーション。

C#は常に.NETに結び付けられているわけではありません。 1)C#は、モノランタイム環境で実行でき、LinuxおよびMacOSに適しています。 2)Unityゲームエンジンでは、C#はスクリプトに使用され、.NETフレームワークに依存しません。 3)C#は、.NetMicRoframeworkなどの埋め込みシステム開発にも使用できます。

C#は、.NETエコシステムで中核的な役割を果たし、開発者にとって好ましい言語です。 1)C#は、C、C、Javaの利点を組み合わせた効率的で使いやすいプログラミング方法を提供します。 2).NETランタイム(CLR)を介して実行して、効率的なクロスプラットフォーム操作を確保します。 3)C#は、LINQや非同期プログラミングなどの基本的な使用から高度な使用をサポートします。 4)最適化とベストプラクティスには、StringBuilderおよび非同期プログラミングを使用して、パフォーマンスと保守性を向上させることが含まれます。

C#は、2000年にMicrosoftがリリースしたプログラミング言語で、CのパワーとJavaのシンプルさを組み合わせることを目指しています。 1.C#は、カプセル化、継承、多型をサポートするタイプセーフ、オブジェクト指向のプログラミング言語です。 2. C#のコンパイルプロセスは、コードを中間言語(IL)に変換し、.NETランタイム環境(CLR)でマシンコード実行にコンパイルします。 3. C#の基本的な使用法には、可変宣言、制御フロー、関数の定義が含まれ、高度な使用法には非同期プログラミング、LINQ、およびデリゲートなどが含まれます。4。一般的なエラーには、デバッガー、例外処理、ロギングを介してデバッグできるタイプミスマッチおよびヌル参照の例外が含まれます。 5.パフォーマンスの最適化の提案には、LINQの使用、非同期プログラミング、およびコードの読み取り可能性の向上が含まれます。

C#はプログラミング言語であり、.NETはソフトウェアフレームワークです。 1.C#はMicrosoftによって開発されており、マルチプラットフォーム開発に適しています。 2..NETは、クラスライブラリとランタイム環境を提供し、多言語をサポートします。 2つは協力して最新のアプリケーションを構築します。

C#.NETは、C#言語と.NETフレームワークの利点を組み合わせた強力な開発プラットフォームです。 1)エンタープライズアプリケーション、Web開発、ゲーム開発、モバイルアプリケーション開発で広く使用されています。 2)C#コードは中間言語にコンパイルされ、.NETランタイム環境によって実行され、ガベージコレクション、タイプの安全性、LINQクエリをサポートします。 3)使用の例には、基本的なコンソール出力と高度なLINQクエリが含まれます。 4)空の参照やタイプ変換エラーなどの一般的なエラーは、デバッガーとロギングを通じて解決できます。 5)パフォーマンスの最適化の提案には、非同期プログラミングとLINQクエリの最適化が含まれます。 6)競争にもかかわらず、C#.NETは継続的なイノベーションを通じて重要な地位を維持しています。

C#.NETの将来の傾向は、主にクラウドコンピューティング、マイクロサービス、AIおよび機械学習統合、およびクロスプラットフォーム開発の3つの側面に焦点を当てています。 1)クラウドコンピューティングとマイクロサービス:C#.NETは、Azureプラットフォームを介してクラウド環境のパフォーマンスを最適化し、効率的なマイクロサービスアーキテクチャの構築をサポートします。 2)AIと機械学習の統合:ML.NETライブラリの助けを借りて、C#開発者はアプリケーションに機械学習モデルを埋め込み、インテリジェントアプリケーションの開発を促進できます。 3)クロスプラットフォーム開発:.NetCoreおよび.Net5を介して、C#アプリケーションはWindows、Linux、およびMacOで実行され、展開範囲が拡大します。

C#.NET開発における最新の開発とベストプラクティスには、次のものが含まれます。1。非同期プログラミングは、アプリケーションの応答性を向上させ、Asyncを使用して非ブロッキングコードを簡素化し、キーワードを待ちます。 2。LINQは強力なクエリ関数を提供し、遅延した実行および式ツリーを介してデータを効率的に操作します。 3.パフォーマンスの最適化の提案には、非同期プログラミングの使用、LINQクエリの最適化、メモリの合理的な管理、コードの読みやすさとメンテナンスの改善、単体テストの書き込みが含まれます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

メモ帳++7.3.1
使いやすく無料のコードエディター

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。
