Как включить [handleerror] для повторной работы после того, как он перестал работать?
У меня есть большое приложение MVC5 в VS2015, которое обращается примерно к 25 таблицам в базе данных. Я почти закончил с этим и пытаюсь настроить обработку исключений с помощью HandleException.
К сожалению, я не понимал, что если вы экспериментируете с ним, перемещая операторы throw и атрибуты HandleError, выключая и включая элемент customErrors, удаляя (замечая) и повторно включая RegisterGlobalFilters, программа попадает в состояние, когда независимо от того, что вы делаете, вы никогда не сможете заставить обработку исключений с HandleError работать снова. Я надеюсь, что ошибаюсь и не навсегда отключил атрибуты HandleError в своем приложении. Он игнорирует мои атрибуты HandleError и отображает необработанные страницы ошибок.
Помимо моего большого производственного приложения, у меня есть два небольших тестовых приложения, одно из которых отлично работает с атрибутом HandleError, а другое-с аналогичным образом отозванной лицензией HandleError (фигура речи).
Ниже приведен код из моего небольшого приложения, которое терпит неудачу и показывает необработанные ошибки для ошибок ArithmeticException и DataException. Есть идеи, что может быть не так?
Что я уже пробовал:
Веб.конфиг
<system.web> <customErrors mode="On"> <authentication mode="None" /> <compilation debug="true" targetFramework="4.5.2" /> <httpRuntime targetFramework="4.5.2" />
HomeController. cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Data; namespace TestExceptionHandling.Controllers { [HandleError(ExceptionType = typeof(ArithmeticException), View = "ArithmeticException")] public class HomeController : Controller { public ActionResult Index() { return View(); } [HandleError(ExceptionType = typeof(DataMisalignedException), View = "DataMisaligned")] public ActionResult About() { //throw new DataMisalignedException(); throw new ArithmeticException("Oops, an arithmetic error occurred."); ViewBag.Message = "Your application description page."; return View(); } [HandleError(ExceptionType = typeof(DataException), View = "DataException")] public ActionResult Contact() { throw new DataException("Oops, a data exception error occurred."); ViewBag.Message = "Your contact page."; return View(); } } } ArithmeticException.cshtml @{ ViewBag.Title = "ErrorView01"; Layout = "~/Views/Shared/_LoginPartial.cshtml"; } <h4>ErrorView01<h4> <h4>An arithmetic exception occurred.</h4>
DataMisaligned.cshtml по
@{ ViewBag.Title = "DataMisaligned"; Layout = "~/Views/Shared/_LoginPartial.cshtml"; } DataMisaligned.cshtml <h2>Your action could not be completed due to a data misalignment issue.</h2>
DataException.cshtml по
{ ViewBag.Title = "DataException"; Layout = "~/Views/Shared/_LoginPartial.cshtml"; } DataException.cshtml <h2>The action could not be completed due to a Data Exception. If deleting a data object, e'g' a DOT, make sure all subordinate objects, .e.g. notices, letters, etc. are individually deleted first. This is required to maintain referential integrity and avoid orphaned database objects.</h2>
Все вышеперечисленные виды находятся в разделе ~ / Views / Shared
FilterConfig.в CS
namespace TestExceptionHandling { public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); } } }
Graeme_Grant
Ваш код был чрезвычайно труден для чтения. Всегда будьте уважительны и правильно форматируйте, если хотите, чтобы другие отвечали.
Dave Kreskowiak
Обычно это происходит, когда ваш код обработки ошибок / контроллер/представление также создает исключение.