如何在ASP.NET MVC5中显示403错误的状态描述?
解决自定义403错误页显示状态描述的问题
没问题,这事儿我熟!要让自定义403错误页显示你传入的那段禁止原因,按下面几步来就行:
1. 正确配置web.config的自定义错误规则
首先得确保你的错误页配置用ExecuteURL模式,而不是普通的重定向——因为重定向会创建新请求,原来的错误消息就丢了。在web.config里添加这两段配置:
<system.web> <customErrors mode="On" defaultRedirect="~/Error"> <error statusCode="403" redirect="~/Error/Forbidden" /> </customErrors> </system.web> <system.webServer> <httpErrors errorMode="Custom" existingResponse="Replace"> <remove statusCode="403" subStatusCode="-1" /> <error statusCode="403" path="/Error/Forbidden" responseMode="ExecuteURL" /> </httpErrors> </system.webServer>
这里responseMode="ExecuteURL"是核心,它会在当前请求上下文里执行错误页的Action,保留所有原始响应信息。
2. 在Error控制器里获取错误描述
创建(或修改)Error控制器的Forbidden Action,从HttpContext里取出你传入的状态描述:
public class ErrorController : Controller { public ActionResult Forbidden() { // 取出你传入的禁止原因 var forbiddenReason = HttpContext.Response.StatusDescription; // 兜底:如果没有自定义消息,用默认提示 if (string.IsNullOrWhiteSpace(forbiddenReason)) { forbiddenReason = "您无权访问该资源,请检查权限后重试。"; } ViewBag.ForbiddenReason = forbiddenReason; return View(); } }
3. 在视图里展示错误信息
最后创建对应的Forbidden视图(~/Views/Error/Forbidden.cshtml),把消息渲染出来:
@{ ViewBag.Title = "403 - 禁止访问"; } <div class="error-page"> <h1>403</h1> <h2>禁止访问</h2> <p>@ViewBag.ForbiddenReason</p> </div>
这样不管你是从控制器返回new HttpStatusCodeResult(HttpStatusCode.Forbidden, "自定义原因"),还是在Action过滤器里设置filterContext.Result = new HttpStatusCodeResult(HttpStatusCode.Forbidden, "自定义原因"),这段自定义消息都会被传递到错误页上显示出来。
内容的提问来源于stack exchange,提问作者Luke Hammer
相关产品推荐
相关产品推荐

