如何在非开发环境为管理员返回开发者异常页面作为IActionResult
实现方案
第一步:调整Startup.cs中间件配置
你需要先全局注册开发者异常页中间件,保证生产环境也能调用它的渲染逻辑,调整后的配置如下:
// 全局注册开发者异常页,所有环境生效 app.UseDeveloperExceptionPage(); if (env.IsDevelopment()) { // 开发环境不需要额外的错误跳转逻辑 } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } // 后续其他中间件(路由、授权、静态文件等)保持原有顺序不变 // ...
这里注意中间件顺序不能乱,UseDeveloperExceptionPage 要放在 UseExceptionHandler 前面,保证异常可以正常冒泡到开发者异常页中间件。
第二步:完善Error.cshtml.cs的处理逻辑
首先引入需要的命名空间:
using Microsoft.AspNetCore.Diagnostics;
然后修改OnGet方法的逻辑如下:
public IActionResult OnGet() { if (Request.Cookies["admin"] == ReadonlyJsonService.Root.adminCookie) { // 读取当前捕获的异常信息 var exceptionHandlerFeature = HttpContext.Features.Get<IExceptionHandlerFeature>(); if (exceptionHandlerFeature != null) { // 清除异常已处理标记,让异常继续向上传递 HttpContext.Features.Set<IExceptionHandlerFeature>(null); } return new EmptyResult(); } // 普通用户直接渲染默认的Error.cshtml页面 return Page(); }
注意事项
- 当前用Cookie做管理员校验的方式安全性较低,生产环境建议替换为框架自带的身份认证、角色校验逻辑,避免Cookie伪造带来的信息泄露风险
- 开发环境下原有逻辑保持不变,默认直接展示开发者异常页,不会进入/Error路由逻辑
内容的提问来源于stack exchange,提问作者trinalbadger587
相关产品推荐
相关产品推荐

