ミドルウェアC#Asp.net Coreでエラーを処理する方法は?
CustomExceptionMiddlewareという名前の新しいフォルダーとその中にclassExceptionMiddleware.csを作成します。
最初に行う必要があるのは、依存性注入を介してIloggerManagerサービスとRequestDelegateを登録することです。
RequestDeleagateタイプの_nextパラメーターは、HTTPリクエストを処理できる関数デリゲートです。
登録プロセスの後、InvokeAsync()メソッドを作成する必要があります。RequestDelegateはそれなしではリクエストを処理できません。
_nextデリゲートは要求を処理する必要があり、コントローラーからのGetアクションは正常な応答を生成する必要があります。ただし、リクエストが失敗した場合(例外を強制しているため)、
ミドルウェアはcatchブロックをトリガーし、HandleExceptionAsyncmethodを呼び出します。
public class ExceptionMiddleware{ private readonly RequestDelegate _next; private readonly ILoggerManager _logger; public ExceptionMiddleware(RequestDelegate next, ILoggerManager logger){ _logger = logger; _next = next; } public async Task InvokeAsync(HttpContext httpContext){ try{ await _next(httpContext); } catch (Exception ex){ _logger.LogError($"Something went wrong: {ex}"); await HandleExceptionAsync(httpContext, ex); } } private Task HandleExceptionAsync(HttpContext context, Exception exception){ context.Response.ContentType = "application/json"; context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; return context.Response.WriteAsync(new ErrorDetails(){ StatusCode = context.Response.StatusCode, Message = "Internal Server Error from the custom middleware." }.ToString()); } }
ExceptionMiddlewareExtensionsクラスを別の静的メソッドで変更します-
public static void ConfigureCustomExceptionMiddleware(this IApplicationBuilder app){ app.UseMiddleware<ExceptionMiddleware>(); }
このメソッドは、StartupクラスのConfigureメソッドで使用します-
app.ConfigureCustomExceptionMiddleware();
-
C#ASP.NETWebAPIでURIを使用してWebAPIバージョニングを行う方法は?
Web APIサービスが公開されると、さまざまなクライアントアプリケーションがWebAPIサービスの使用を開始します。ビジネスの成長と要件の変化に応じて、サービスも変更する必要がある場合がありますが、サービスの変更は、既存のクライアントアプリケーションを壊さない方法で行う必要があります。 これは、WebAPIのバージョン管理が役立つ場合です。既存のサービスをそのまま維持するため、既存のクライアントアプリケーションを壊さずに、新しいクライアントアプリケーションが使用を開始できる新しいバージョンのサービスを開発します。 バージョン管理を実装するオプションの1つは、URIを使用することです。以下
-
C#ASP.NET WebAPIでCORSの問題を解決するにはどうすればよいですか?
クロスオリジンリソースシェアリング (CORS)は、追加のHTTPヘッダーを使用して、あるオリジンで実行されているWebアプリケーションに、別のオリジンから選択されたリソースへのアクセスを許可するようにブラウザーに指示するメカニズムです。 Webアプリケーションは、自身とは異なるオリジン(ドメイン、プロトコル、またはポート)を持つリソースを要求すると、クロスオリジンHTTPリクエストを実行します。 たとえば、フロントエンド(UI)とバックエンド(サービス)を持つアプリケーションについて考えてみましょう。フロントエンドがhttps://demodomain-ui.comから提供されているとしま