在Startup.cs中我有以下代碼:
if (env.IsDevelopment()
{
app.UseDeveloperExceptionPage()。
}
else (env.IsDevelopment())
{
app.UseExceptionHandler("/Error"/span>)。
app.UseHsts()。
我希望我的應用程式在部署期間仍然向管理員用戶顯示開發人員的例外頁面。
在我的Error.cshtml.cs中,我想有如下內容:
public IActionResult OnGet()
{
if (Request.Cookies["admin"/span>] == ReadonlyJsonService.Root.adminCookie)
{
//顯示開發者例外頁面。
}
else }
{
///Render Error.cshtml,就像我剛才寫的'public void OnGet() {}'一樣。
}
}
uj5u.com熱心網友回復:
為什么不創建一個自定義的中間件呢?
在這里我們創建了AppExceptionHandlerMiddleware。如果你在開發環境中,或者你有管理cookie,它就會顯示例外細節。
AppExceptionHandlerMiddleware.cs
public class AppExceptionHandlerMiddleware
{
private readonly RequestDelegate _next;
private readonly IWebHostEnvironment _env;
private readonly DeveloperExceptionPageMiddleware developerExceptionPageMiddleware;
private readonly ExceptionHandlerMiddleware exceptionHandlerMiddleware;
public AppExceptionHandlerMiddleware(RequestDelegate next, IOptions<DeveloperExceptionPageOptions> dexhOptions,
IOptions<ExceptionHandlerOptions> exhOptions, ILoggerFactory loggerFactory, IWebHostEnvironment env,
DiagnosticListener diagnosticListener, DiagnosticSource diagnosticSource, IEnumerable<IDeveloperPageExceptionFilter> filters)。
{
_next = next;
_env = env;
developerExceptionPageMiddleware = new DeveloperExceptionPageMiddleware(next, dexhOptions, loggerFactory, env, diagnosticSource, filters)。
exceptionHandlerMiddleware = new ExceptionHandlerMiddleware(next, loggerFactory, exhOptions, diagnosticListener)。
}
public async Task Invoke(HttpContext context)。
{
if (context.Request.Cookies["admin"/span>] == ReadonlyJsonService.Root.adminCookie || _env.IsDevelopment()
{
await developerExceptionPageMiddleware.Invoke(context)。
}
else[/span
{
await exceptionHandlerMiddleware.Invoke(context);
}
}
}
AppExceptionHandlerExtensions.cs
public static class AppExceptionHandlerExtensions
{
public static IApplicationBuilder UseAppExceptionHandler()
this IApplicationBuilder builder)
{
return builder.UseMiddleware<AppExceptionHandlerMiddleware>()。
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
...
//Config ExceptionHandlerMiddlewareOption via DI.。
services.Configure<ExceptionHandlerOptions>(option =>
{
option.ExceptionHandlingPath = new PathString("/Error") 。
});
...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseAppExceptionHandler()。
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/320010.html
標籤:
