Как показать настраиваемую страницу 404 в ASP.NET-MVC?

Когда на моем сайте какой-либо URL-адрес 404, я хочу показать настраиваемую страницу 404, отображаемую с помощью ASP.NET-MVC. Однако я не хочу использовать подход подстановочного маршрута, потому что это отключит стандартные веб-формы. В настоящее время мой код выглядит так:

if (serverException is HttpException && ((HttpException)serverException).GetHttpCode() == 404)
{
 //Server.Transfer("~/Test.aspx"); //1
 //Server.Transfer("~/error/gf54tvmdfguj85fghf/404"); //2
}

этот код находится внутри App_Error

// 1 работает. Test.aspx - стандартная веб-форма

// 2 не работает, так как это маршрут asp.net-mvc

Как заставить работать MVC-маршрут?


person usr    schedule 02.09.2009    source источник


Ответы (1)


Вы можете использовать событие ошибки приложения ... например:

 protected void Application_Error(object sender, EventArgs e)
{
  //Check if it's a 404 error:
  Exception exception = Server.GetLastError();
  HttpException httpException = exception as HttpException;

  if(httpException.GetHttpCode() == 404) {
      //Redirect to the error route
     Response.Redirect(String.Format("~/Error/404/?message={0}", exception.Message));
  }
}
person Robban    schedule 02.09.2009
comment
Я не хочу перенаправлять ни при каких обстоятельствах. Я хочу, чтобы отображался MVC-View. - person usr; 02.09.2009
comment
Да, это будет отображать MVC-View, если у вас есть ErrorController с соответствующими методами. - person Robban; 02.09.2009
comment
Было бы, но перенаправив ... - person usr; 02.09.2009
comment
Почему бы вам не сделать перенаправление? - person aolde; 05.09.2009
comment
Перенаправление на 404 - ужасная идея. Я с usr по этому вопросу. - person devios1; 26.10.2010