Подходит ли этот подход к использованию ELMaH с запахом MVC? - PullRequest
7 голосов
/ 08 февраля 2010

Я искал подходы к использованию ELMaH с ASP.Net MVC, чтобы я мог использовать пользовательскую страницу ошибок для всех исключений, включая 404.

Нет нет недостатка из вопросов , спрашивающих , как заставить /Shared/Error.aspx работать правильно в ASP.Net MVC - с или без Elmah. У меня не было проблемы с этой задачей, но я чувствую, что мое решение использовать пользовательскую страницу 404 вместе с ELMaH было слишком простым, и я не могу избавиться от ощущения, что в нем должно быть что-то большее.

После включения customErrors в Web.Config я создал новое Действие в моем HomeController:

public ActionResult PageNotFound()
{
    return null;
}

Оттуда я добавил новый метод в свой файл Global.asax, чтобы воспользоваться возможностями фильтрации журналов ELMaH и, после разрешения исключения, перенаправить ответ обратно на вышеупомянутый PageNotFound ActionResult:

    public void errorLog_Filtering(object sender, ExceptionFilterEventArgs e)
    {
        if (e.Exception.GetType().Equals(typeof(HttpException)))
        {
            HttpException ex = (HttpException)e.Exception;
            if (ex.GetHttpCode() == 404)
                Response.Redirect("/Home/PageNotFound");
        }
    }

Я пропускаю что-то, что поставляется с MVC по умолчанию (потому что я все еще нахожу свой путь для многих вещей, касающихся MVC), или обдумываю проблему, где существует более простое решение? Цени любой вклад.

1 Ответ

3 голосов
/ 09 февраля 2010

Я уверен, что ASP.NET может обработать такие вещи для вас, вам не обязательно вызывать что-либо, чтобы перенаправить на ваш 404 Action внутри вашего global.asax. Ниже приведен пример.

<configuration>
    <system.web>
        <customErrors mode="On">
            <error statusCode="404" redirect="/servererrors/404.aspx" />
        </customErrors>
    </system.web>
</configuration>

http://www.xefteri.com/articles/show.cfm?id=11

...