рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВ рд╕рднреА рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛

рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ ASP.NET MVC рдореЗрдВ рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ HandleErrorAttribute , рдЬрд┐рд╕реЗ MSDN рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдПрдХ рдПрдХреНрд╢рди рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдП рдЧрдП рдЕрдкрд╡рд╛рдж рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдХрд╣реАрдВ рднреА, рдПрдХ рд╣реА MSDN рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ ( рдореБрдЭреЗ рдЕрдкрдиреА рдирд╛рдХ рдХреЗ рд╕рд╛рде рдкреНрд░рд╣рд╛рд░ рдХрд░реЗрдВ, рд▓рд┐рдВрдХ рджреЗрдВ рдЬрд╣рд╛рдВ рдпрд╣ рд▓рд┐рдЦрд╛ рд╣реИ рдЕрдЧрд░ рдореИрдВрдиреЗ рджреЗрдЦрд╛) рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рдХреЛ 500 рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред

HandleErrorAttribute рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ:

 // If this is not an HTTP 500 (for example, if somebody throws an HTTP 404 from an action method), // ignore it. if (new HttpException(null, exception).GetHttpCode() != 500) { return; } 

рдореБрдЭреЗ рдЖрдкрдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкрд╡рд╛рдж рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреГрд╖реНрда рджреЗрдЦреЗрдВ, рди рдХрд┐ "рдореМрдд рдХрд╛ рдкреАрд▓рд╛ рдкреГрд╖реНрда" рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреИрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рдкреГрд╖реНрда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдпрд╣ Web.config рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ) рд▓реЗрдХрд┐рди рдЙрд╕ рдкрд░ рдФрд░ рдмрд╛рдж рдореЗрдВ)ред


рдЕрдкрдиреА рдЦреБрдж рдХреА рдЕрдиреБрд░реВрдк HandleErrorAttribute рдмрдирд╛рдирд╛


рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдорд╛рдирдХ HandleErrorAttribute рд╣рдореЗрдВ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдмрдирд╛рдПрдВред

IExceptionFilter , рдЖрдк IExceptionFilter рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдЗрд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдо рдорд╛рдирдХ IExceptionFilter рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдЦреБрд╢ рд╣реИрдВ рдЕрдЧрд░ рдпрд╣ рд╕рднреА рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЪреВрдВрдХрд┐ рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рд╣рдореЗрдВ рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИ, рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рд╣рдореЗрдВ HandleErrorAttribute рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗрдЧреА рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрдкрддреНрддрд┐рдЬрдирдХ рд╣реИред

 public class HandleAllErrorAttribute : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { if (filterContext == null) { throw new ArgumentNullException("filterContext"); } // If custom errors are disabled, we need to let the normal ASP.NET exception handler // execute so that the user can see useful debugging information. if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled) { return; } Exception exception = filterContext.Exception; if (!ExceptionType.IsInstanceOfType(exception)) { return; } string controllerName = (string)filterContext.RouteData.Values["controller"]; string actionName = (string)filterContext.RouteData.Values["action"]; HandleErrorInfo model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName); filterContext.Result = new ViewResult { ViewName = View, MasterName = Master, ViewData = new ViewDataDictionary<HandleErrorInfo>(model), TempData = filterContext.Controller.TempData }; filterContext.ExceptionHandled = true; filterContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.StatusCode = new HttpException(null, exception).GetHttpCode(); // Certain versions of IIS will sometimes use their own error page when // they detect a server error. Setting this property indicates that we // want it to try to render ASP.NET MVC's error page instead. filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; } } 

рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХреБрдЫ HandleErrorAttribute рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдорд╛рдирдХ HandleErrorAttribute рдХреЛрдб рд╣реИ, рдЬреЛ рдХрд┐ HttpStatusCode рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ:


рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рддреИрдпрд╛рд░ рд╣реИ, рдЕрдм рд╣рдо рдорд╛рдирдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдмрджрд▓ рджреЗрдВрдЧреЗред рд╣рдо рдЗрд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдВрддреНрд░рдХ рдпрд╛ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рди рд▓рд┐рдЦреЗрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХрд╛рдо рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо Global.asax.cs рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдорд╛рдирдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рдмрдЬрд╛рдп рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реА рдЕрднреА-рдЕрднреА рдмрдиреА рд╡рд┐рд╢реЗрд╖рддрд╛:

 filters.Add(new HandleAllErrorAttribute()); 


рдХрд╕реМрдЯреА


рдЕрдм, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдорд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдорд╛рдирдХ ~ / рджреГрд╢реНрдп / рд╕рд╛рдЭрд╛ / Error.cshtml рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ :

 @model System.Web.Mvc.HandleErrorInfo @{ ViewBag.Title = "Error"; } <h2> Sorry, an error occurred while processing your request. </h2> <h3>@Model.Exception.Message</h3> 

рдФрд░ Web.config (рдЬреЛ рд░реВрдЯ рдкрд░ рд╕реНрдерд┐рдд рд╣реИ) рдореЗрдВ System.Web рд╕реЗрдХреНрд╢рди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ:

 <customErrors mode="On" defaultRedirect="Error" /> 

рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде, рд╣рдо рдХрд╕реНрдЯрдо рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ, рдФрд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ, рдХрд╕реНрдЯрдо рддреНрд░реБрдЯрд┐ рдкреГрд╖реНрдареЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВред

рдЕрдм рд╣рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рдмрдврд╝рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореИрдВ рдорд╛рдирдХ рдирд┐рдпрдВрддреНрд░рдХ (рд╕реНрдЯреВрдбрд┐рдпреЛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд) рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдпрд╣ рдХрд░реВрдВрдЧрд╛:

 public ActionResult About() { throw new HttpException(403, " !"); return View(); } 

рд╡рд╣ рд╕рдм рд╣реИ! рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, "рдЕрдмрд╛рдЙрдЯ" рдЕрдиреБрднрд╛рдЧ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдиреЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред


Source: https://habr.com/ru/post/In137672/


All Articles