且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何在 Asp.Net Mvc 3 中显示自定义错误页面?

更新时间:2023-01-10 09:32:20

我使用以下步骤:

//在 Global.asax.cs 中:protected void Application_Error(对象发送者,EventArgs e){var ex = Server.GetLastError().GetBaseException();Server.ClearError();var routeData = new RouteData();routeData.Values.Add("控制器", "错误");routeData.Values.Add("action", "Index");if (ex.GetType() == typeof(HttpException)) {var httpException = (HttpException)ex;var code = httpException.GetHttpCode();routeData.Values.Add("状态", 代码);} 别的 {routeData.Values.Add("状态", 500);}routeData.Values.Add("error", ex);IController errorController = new Kavand.Web.Controllers.ErrorController();errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));}protected void Application_EndRequest(对象发送者,EventArgs e){if (Context.Response.StatusCode == 401) {//这很重要,因为 401 默认不是错误!!!throw new HttpException(401, "你没有被授权");}}

与:

//在错误控制器中:公共类错误控制器:控制器{公共 ActionResult 索引(整数状态,异常错误){Response.StatusCode = 状态;返回视图(状态);}受保护的覆盖无效处置(布尔处置){base.Dispose(处置);}}

和错误文件夹中的索引视图:

@* in ~/Views/Error/Index.cshtml: *@@model Int32@{布局 = 空;}<!DOCTYPE html><头><title>卡万德 |错误头部><身体><div>您的请求有误.错误是:<br/><p style="颜色:红色;">@switch(模型){案例401:{<span>您的信息在这里...</span>}休息;案例403:{<span>您的信息在这里...</span>}休息;案例404:{<span>您的信息在这里...</span>}休息;案例 500:{<span>您的信息在这里...</span>}休息;//以及更多错误代码的更多情况...默认: {<span>未知错误!!!</span>}休息;}</p>