Пользовательская страница ошибки в MVC - PullRequest
3 голосов
/ 09 января 2010

Мне нужно показать страницу ошибки, используя customerror на web.config

Но какой бы ни была ошибка, даже в web.config я указал неверную версию, также необходимо показать страницу с ошибкой,

Как я могу это сделать. Я пытался, но URL перенаправляет на

"http://localhost:1966/Error.html?aspxerrorpath=Error.html"

CustomError Tag:

<customErrors mode="On" defaultRedirect="Error.html" />

И показывает другую страницу ошибки из mvc, а не из шахт.

Ответы [ 2 ]

7 голосов
/ 09 января 2010

В ASP.NET MVC обработка ошибок обычно указывается с помощью атрибута HandleError . По умолчанию он использует представление с именем «Ошибка» для отображения пользовательской страницы ошибок. Если вы просто хотите настроить этот вид, вы можете отредактировать Views / Shared / Error.aspx.

Если вам нужен другой View в конкретных случаях, вы можете явно указать свойство View.

Вот пример действия контроллера с настраиваемым представлением ошибок:

[HandleError(View = "CustomError")]
public ViewResult Foo() 
{
    // ...
}

Об общей обработке ошибок в ASP.NET MVC см. этот пост .

1 голос
/ 09 января 2010

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

Еще одно решение для обнаружения ошибок - это наличие базового класса, из которого происходит класс контроллера. И внутри базового класса ovveride метод OnException, чтобы показать удобное для пользователя представление ошибок, например, в "~ / Shared / Error.aspx"

Вам также нужно указать <customErrors mode="On" > в вашем корневом web.config для работы этого решения.

public class BaseController : Controller
{
        ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

    public BaseController()
    {
    }

    protected override void OnException(ExceptionContext filterContext)
    {
        // Log the error that occurred.
        log.Fatal("Generic Error occured",filterContext.Exception);

        // Output a nice error page
        if (filterContext.HttpContext.IsCustomErrorEnabled)
        {
            filterContext.ExceptionHandled = true;
            View("Error").ExecuteResult(ControllerContext);
        }
    }

}

Вышеупомянутое решение улавливает большинство возможных «желтых экранов ошибок смерти», которые возникают.

Для обработки других ошибок, таких как 404, я использую следующее mapRoute last в global.asax RegisterRoutes (маршруты RouteCollection)

// Show a 404 error page for anything else.
            routes.MapRoute(
                "Error",
                "{*url}",
                new { controller = "Shared", action = "Error" }
            );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...