Member 12824529 Ответов: 1

Как включить [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

Обычно это происходит, когда ваш код обработки ошибок / контроллер/представление также создает исключение.

1 Ответов

Рейтинг:
5

Member 12824529

Я нашел решение. Когда я создавал представления для различных конкретных типов исключений, я указывал, что он должен использовать _Layout.cshtml для макета. Я обнаружил, что это вызывает исключение. Так что теперь я не ставлю галочку в поле "Использовать страницу макета". Моя функциональность [HandleError] работает.

Дэйв, ты был прав; мне просто нужно было выяснить, откуда может взяться такое исключение. Спасибо.