CustomExceptionMiddleware नाम का एक नया फ़ोल्डर और उसके अंदर एक classExceptionMiddleware.cs बनाएँ।
पहली चीज़ जो हमें करने की ज़रूरत है वह है निर्भरता इंजेक्शन के माध्यम से अपनी IloggerManager सेवा और RequestDelegate को पंजीकृत करना।
RequestDeleagate प्रकार का _next पैरामीटर एक फ़ंक्शन प्रतिनिधि है जो हमारे HTTP अनुरोधों को संसाधित कर सकता है।
पंजीकरण प्रक्रिया के बाद, हमें InvokeAsync() विधि बनाने की आवश्यकता है। RequestDelegate इसके बिना अनुरोधों को संसाधित नहीं कर सकता है।
_next प्रतिनिधि को अनुरोध को संसाधित करना चाहिए और हमारे नियंत्रक से प्राप्त कार्रवाई को एक सफल प्रतिक्रिया उत्पन्न करनी चाहिए। लेकिन अगर कोई अनुरोध असफल होता है (और ऐसा इसलिए है, क्योंकि हम अपवाद को मजबूर कर रहे हैं),
हमारा मिडलवेयर कैच ब्लॉक को ट्रिगर करेगा और 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>(); }
स्टार्टअप वर्ग में कॉन्फ़िगर विधि में इस विधि का उपयोग करें -
app.ConfigureCustomExceptionMiddleware();