Регистрация ошибок ELMAH: возвращается неправильное сообщение об ошибке

Я пытаюсь использовать Elmah для регистрации ошибок в моем приложении MVC. Но по какой-то причине он сообщает о неправильной ошибке.

Я помещаю следующий код в свой класс контроллера, чтобы убедиться, что возникает ошибка:

        int a = 0;
        int b = 10 / a;

Как только этот код выполняется, отправляется сообщение ErrorMail, содержащее следующее сообщение:

System.InvalidOperationException: представление «Ошибка» или его мастер не найдены, или механизм представления не поддерживает искомые местоположения. Поиск выполнялся в следующих местах: ~/Views/Home/Error.aspx ~/Views/Home/Error.ascx ~/Views/Shared/Error.aspx ~/Views/Shared/Error.ascx ~/Views/Home/Error. cshtml ~/Views/Home/Error.vbhtml ~/Views/Shared/Error.cshtml ~/Views/Shared/Error.vbhtml

Но представление генерируется правильно. Так что я не вижу настоящего исключения, только «фальшивое» выше.

У меня есть следующий файл web.config:

<configSections>
    <sectionGroup name="elmah">
      <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
      <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
      <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
  <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
</sectionGroup>
</configSections>

<elmah>
  <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data" />
  <errorMail from="[email protected]"
         to="[email protected]"
         cc="[email protected]"
         bcc="[email protected]"
         subject="elmah error mail" />
  <security allowRemoteAccess="true" />
<!--elmah-->
</elmah>

<system.web>
  <customErrors mode="On" defaultRedirect="~/Error/GeneralError">
  <error statusCode="404" redirect="~/Error/Http404" />
</customErrors>

Как видите, я использую другую страницу для ошибки 404 и общей ошибки (то есть всего остального). У меня есть ErrorController с этими двумя методами:

public class ErrorController : Controller
{
    public ActionResult Http404()
    {
        return View();
    }

    public ActionResult GeneralError()
    {
        return View();
    }
 }

Если я использую стандартный «Error.aspx» в общей папке, я увижу правильную страницу, но ErrorMail не отправляется, поэтому я полагаю, что Elmah не обрабатывает исключение.

Может ли кто-нибудь определить, что я делаю неправильно? Мне нужно опубликовать еще немного кода?

Большое спасибо за любую помощь, которую вы можете мне оказать.


person Steven Lemmens    schedule 15.07.2011    source источник
comment
У вас есть контроллер Error?   -  person Oded    schedule 15.07.2011
comment
да. У него есть два метода: GeneralError, который просто возвращает представление (представление находится в ~/Error/GeneralError.aspx) и Http404 с представлением Http404.aspx. Должен ли я изменить эти представления, чтобы они были частичными представлениями?   -  person Steven Lemmens    schedule 15.07.2011
comment
Я обновил свой вопрос, чтобы быть уверенным   -  person Steven Lemmens    schedule 15.07.2011


Ответы (1)


Из сообщения ~/Views/Home/Error.aspx похоже, что он пытается найти представление с именем error.aspx, которое, как мне кажется, по умолчанию находится в общей папке/папке при создании сайта MVC3.

Возможно, вам стоит посмотреть:

http://weblogs.asp.net/scottgu/archive/2008/07/14/asp-net-mvc-preview-4-release-part-1.aspx

person Steve    schedule 15.07.2011
comment
Да, файл Error.aspx по умолчанию находится в общей папке. Если я создам такой файл (например, с приветствием, мир), то этот файл будет показан пользователю. Но журнал ErrorMail и Elmah больше не происходит. - person Steven Lemmens; 15.07.2011