Подтвердить что ты не робот

Представление "Ошибка" или его мастер не найдено

Я потратил много времени на то, чтобы разобраться в обходном пути для этого безрезультатно, поэтому я подумал, что посмотрю, есть ли у кого-нибудь идея.

Я использую Elmah в своем приложении ASP.NET MVC3. Я использую тот же самый код из принятого ответа в предыдущей ссылке.

У меня также есть этот код в моем Global.asax для отображения страниц ошибок с правильным ответом HTTP:

    /// <summary>
    /// The customErrors functionality provided by ASP.NET results in HTTP 302 redirects occurring which doesn't accurately reflect what the real HTTP code of the response was.
    /// This method can be used to handle specific HTTP codes without an intermediate redirect.
    /// </summary>
    protected void Application_Error() {
        var exception = Server.GetLastError();
        var httpException = exception as HttpException;
        Response.Clear();
        Server.ClearError();
        var routeData = new RouteData();
        routeData.Values["controller"] = "Error";
        routeData.Values["action"] = "Error500";
        Response.StatusCode = 500;

        if (httpException != null) {
            Response.StatusCode = httpException.GetHttpCode();
            Response.TrySkipIisCustomErrors = true;
            switch (Response.StatusCode) {
                case 403:
                    routeData.Values["action"] = "Error403";
                    break;
                case 404:
                    routeData.Values["action"] = "Error404";
                    routeData.Values["message"] = httpException.Message;
                    break;
                case 500:
                    routeData.Values["action"] = "Error500";
                    break;
            }
        }

        IController errorsController = new ErrorController();
        var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
        errorsController.Execute(rc);
    }

Проблема возникает, когда я не на моей (локальной) машине разработки (которая изначально заставляла меня думать, что это customErrors). Когда исключение выбрасывается, Elmah обрабатывает ошибку и записывает ее правильно. Я также попал на правильную страницу ошибок. Однако, прежде чем вы вернетесь на правильную страницу ошибки, я могу увидеть, что регистрируется другое промежуточное исключение:

The view 'Error' or its master was not found or no view engine supports the searched locations. The following locations were searched: ~/Views/Articles/Error.aspx ~/Views/Articles/Error.ascx ~/Views/Shared/Error.aspx ~/Views/Shared/Error.ascx ~/Views/Articles/Error.cshtml ~/Views/Articles/Error.vbhtml ~/Views/Shared/Error.cshtml ~/Views/Shared/Error.vbhtml

ASP.NET пытается загрузить страницу с ошибкой по умолчанию, даже если я пытаюсь ее обработать. Кто-нибудь есть идеи о том, как предотвратить это?

4b9b3361

Ответ 1

Не вызывать метод base.OnException(context); в вашем настраиваемом обработчике ошибок, который происходит от HandleErrorAttribute. Вы больше не нуждаетесь в этом, потому что вы внедрили обработку пользовательских ошибок в Application_Error.

Ответ 2

У меня была эта же проблема, но я не выполнял base.OnException() в любом месте. Другим возможным решением было удалить это из <system.web> в моем web.config:

<customErrors mode="On" />

Ответ 3

Где-то ваш сайт пытается перейти к ~/Error, и он не может найти его, потому что его не существует.

Попытка удаления или отключения customErrors в вашем Web.config. Я готов установить его значение по умолчанию на и перенаправить на ~/Ошибка

Если вы хотите опубликовать свой Web.config(без какой-либо важной информации), я, вероятно, смогу помочь. Недавно я рассматривал подобные проблемы с Elmah.