CustomExceptionMiddleware नामक एक नया फोल्डर बनाएं और उसके अंदर ExceptionMiddleware.cs क्लास बनाएं।
पहली चीज जो हमें करने की आवश्यकता है वह है अपने IloggerManager सर्विस और RequestDelegate को डिपेंडेंसी इंजेक्शन के माध्यम से रजिस्टर करना।
RequestDelegate प्रकार का _next पैरामीटर एक फंक्शन डेलीगेट है जो हमारे HTTP रिक्वेस्ट को प्रोसेस कर सकता है।
रजिस्ट्रेशन प्रक्रिया के बाद, हमें InvokeAsync() मेथड बनाने की आवश्यकता है। इसके बिना RequestDelegate रिक्वेस्ट प्रोसेस नहीं कर सकता।
_next डेलीगेट को रिक्वेस्ट प्रोसेस करना चाहिए और हमारे कंट्रोलर से Get एक्शन को एक सफल प्रतिक्रिया उत्पन्न करनी चाहिए। लेकिन अगर रिक्वेस्ट असफल होती है (और यह है, क्योंकि हम एक्सेप्शन फोर्स कर रहे हैं),
तो हमारा मिडलवेयर कैच ब्लॉक को ट्रिगर करेगा और HandleAsync मेथड को कॉल करेगा।
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();