یک نکتهی تکمیلی
شبیه سازی customErrors در نگارشهای دیگر ASP.NET که در فایل web.config قابل تنظیم است:
در ASP.NET Core چنین شکلی را پیدا میکند. ابتدا در متد Configure کلاس آغازین برنامه، میان افزارهای مطلب فوق را اضافه میکنیم:
در اینجا ذکر مسیر کامل اکشن متد Index و کنترلر Error ضروری هستند. سپس این کنترلر چنین محتوایی را خواهد داشت:
- در اینجا اگر UseExceptionHandler فعال شده باشد، امکان دسترسی به سرویس IExceptionHandlerFeature خواهد بود.
- و اگر UseStatusCodePagesWithReExecute فعال شده باشد، سرویس IStatusCodeReExecuteFeature اطلاعات مسیر اصلی درخواستی را ارائه میدهد.
- سپس بر اساس id ارسالی به این اکشن متد میتوان برای مثال صفحهی 404 (یافت نشد) و یا سایر صفحات دلخواه دیگری را به صورت انتخابی نمایش داد.
شبیه سازی customErrors در نگارشهای دیگر ASP.NET که در فایل web.config قابل تنظیم است:
<customErrors mode="On" defaultRedirect="error"> <error statusCode="404" redirect="error/notfound" /> <error statusCode="403" redirect="error/forbidden" /> </customErrors>
public void Configure(IApplicationBuilder app) { if (env.IsDevelopment()) { app.UseDatabaseErrorPage(); app.UseDeveloperExceptionPage(); } app.UseExceptionHandler("/error/index/500"); app.UseStatusCodePagesWithReExecute("/error/index/{0}");
public class ErrorController : Controller { private readonly ILogger<ErrorController> _logger; public ErrorController(ILogger<ErrorController> logger) { _logger = logger; } public IActionResult Index(int? id) { var logBuilder = new StringBuilder(); var statusCodeReExecuteFeature = HttpContext.Features.Get<IStatusCodeReExecuteFeature>(); logBuilder.AppendLine($"Error {id} for {Request.Method} {statusCodeReExecuteFeature?.OriginalPath ?? Request.Path.Value}{Request.QueryString.Value}\n"); var exceptionHandlerFeature = this.HttpContext.Features.Get<IExceptionHandlerFeature>(); if (exceptionHandlerFeature?.Error != null) { var exception = exceptionHandlerFeature.Error; logBuilder.AppendLine($"<h1>Exception: {exception.Message}</h1>{exception.StackTrace}"); } foreach (var header in Request.Headers) { var headerValues = string.Join(",", value: header.Value); logBuilder.AppendLine($"{header.Key}: {headerValues}"); } _logger.LogError(logBuilder.ToString()); if (id == null) { return View("Error"); } switch (id.Value) { case 401: case 403: return View("AccessDenied"); case 404: return View("NotFound"); default: return View("Error"); } } }
- و اگر UseStatusCodePagesWithReExecute فعال شده باشد، سرویس IStatusCodeReExecuteFeature اطلاعات مسیر اصلی درخواستی را ارائه میدهد.
- سپس بر اساس id ارسالی به این اکشن متد میتوان برای مثال صفحهی 404 (یافت نشد) و یا سایر صفحات دلخواه دیگری را به صورت انتخابی نمایش داد.