ミドルウェア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から提供されているとしま