asp.net-mvc – ASP.NET MVC 5自定义错误页面
发布时间:2020-12-15 18:38:32 所属栏目:asp.Net 来源:网络整理
导读:我在ASP.NET MVC 5应用程序中使用自定义授权属性,如下所示: public class CustomAuthorizeAttribute : AuthorizeAttribute{ protected override void HandleUnauthorizedRequest(AuthorizationContext context) { if (context.HttpContext.Request.IsAuthe
我在ASP.NET MVC 5应用程序中使用自定义授权属性,如下所示:
public class CustomAuthorizeAttribute : AuthorizeAttribute { protected override void HandleUnauthorizedRequest(AuthorizationContext context) { if (context.HttpContext.Request.IsAuthenticated) { context.Result = new System.Web.Mvc.HttpStatusCodeResult((int)System.Net.HttpStatusCode.Forbidden); } else { base.HandleUnauthorizedRequest(context); } } } 在我的web.config的system.web部分我提到了错误路径,如: <system.web> <customErrors mode="On" defaultRedirect="/Error/Error"> <error statusCode="403" redirect="/Error/NoPermissions"/> </customErrors> </system.web> 但是我从未重定向到/ Error / NoPermissions的自定义错误页面。相反,浏览器会显示“HTTP错误403.0 – 禁止”的常规错误页面。 解决方法
[1]:删除所有’customErrors’&来自Web.config的’httpErrors’
[2]:检查’App_Start / FilterConfig.cs’如下所示: public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); } } [3]:在“Global.asax”中添加此方法: public void Application_Error(Object sender,EventArgs e) { Exception exception = Server.GetLastError(); Server.ClearError(); var routeData = new RouteData(); routeData.Values.Add("controller","ErrorPage"); routeData.Values.Add("action","Error"); routeData.Values.Add("exception",exception); if (exception.GetType() == typeof(HttpException)) { routeData.Values.Add("statusCode",((HttpException)exception).GetHttpCode()); } else { routeData.Values.Add("statusCode",500); } Response.TrySkipIisCustomErrors = true; IController controller = new ErrorPageController(); controller.Execute(new RequestContext(new HttpContextWrapper(Context),routeData)); Response.End(); } [4]:添加“控制器/ ErrorPageController.cs” public class ErrorPageController : Controller { public ActionResult Error(int statusCode,Exception exception) { Response.StatusCode = statusCode; ViewBag.StatusCode = statusCode + " Error"; return View(); } } [5]:在“Views / Shared / Error.cshtml” @model System.Web.Mvc.HandleErrorInfo @{ ViewBag.Title = (!String.IsNullOrEmpty(ViewBag.StatusCode)) ? ViewBag.StatusCode : "500 Error"; } <h1 class="error">@(!String.IsNullOrEmpty(ViewBag.StatusCode) ? ViewBag.StatusCode : "500 Error"):</h1> //@Model.ActionName //@Model.ControllerName //@Model.Exception.Message //@Model.Exception.StackTrace :D (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何在asp.Net中的脚本标签上使用runat =“server”
- 玩玩asp.net 2.0的caching系列二 - RemoveOutputCacheItem
- asp.net-mvc – JqGrid隐藏/显示列
- asp.net – URL重写规则在Visual Studio Development Serve
- 身份验证 – 在达到会话和身份验证票证超时值之前,用户被迫
- asp.net – ReportViewer控件和Ajax UpdatePanel
- 在ASP.Net中加载用户控件并处理回发
- asp.net-mvc – 如何最好地实现保存|保存并关闭|在ASP.NET
- asp.net核心2.0发布到azure得到IIS 502.5错误
- 在ASP.NET 5响应中设置Content-Length标头
推荐文章
站长推荐
- asp.net-mvc-2 – 前端控制器,页面控制器?
- asp.net-mvc – ASP.Net MVC TempData – 如何保
- asp.net-mvc – Azure托管的ASP.NET MVC网站删除
- asp.net-mvc – ASP.NET MVC路由 – 所有看起来都
- asp.net-core – 需要dotnet core 2.1才能在visu
- ASP.NET FileUpload以及文件下载和Repeater控件显
- asp.net-mvc – 自定义Web-Api FilterAttribute的
- asp.net 2.0中利用Ajax2.0实现JSON传送大量页面数
- 在ASP.NET应用程序中实现多语言的最佳方式
- ASP.NET DropDownBox对Text和Value属性都有“Tex
热点阅读