Показать пользовательскую страницу ошибки в MVC 3 не работает! - PullRequest
1 голос
/ 27 июня 2011

Я устанавливаю настраиваемое разрешение ошибок в Web.config:

<customErrors mode="On"/>

и, в Application_Start, помещаю их:

protected void Application_Error(object sender, EventArgs e) {

    var ex = Server.GetLastError().GetBaseException();

    var routeData = new RouteData();

    if (ex.GetType() == typeof(HttpException)) {
        var httpException = (HttpException)ex;
        var code = httpException.GetHttpCode();
        routeData.Values.Add("status", code);
    } else {
        routeData.Values.Add("status", -1);
    }

    routeData.Values.Add("action", "Index");
    routeData.Values.Add("controller", "Error");
    routeData.Values.Add("error", ex);

    IController errorController = new Kavand.Web.Controllers.ErrorController();
    errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
}

, также я создаю контроллер ошибок, подобный этому:

public class ErrorController : Kavand.Web.Mvc.Kontroller
{
    public ActionResult  Index(int status, Exception error) {
        Response.StatusCode = status;
        HttpStatusCode statuscode = (HttpStatusCode)status;
        return View(statuscode);
    }
}

но при возникновении ошибки отображается желтая страница вместо моего пользовательского представления!все могут мне помочь, пожалуйста ?!Большое спасибо, привет

1 Ответ

3 голосов
/ 27 июня 2011

Не забудьте очистить ошибку в Application_Error после извлечения:

protected void Application_Error(object sender, EventArgs e)
{
    var ex = Server.GetLastError().GetBaseException();
    Server.ClearError(); // <-- that's what you are missing
    var routeData = new RouteData();
    ...
}

Также важно удалить глобальный атрибут HandleErrorAttribute, который добавляется в статический метод RegisterGlobalFiltersв Global.asax, поскольку он вам больше не нужен.

Вы также можете найти следующий ответ полезным.

...