Если вы проверите ответ с помощью fiddler, я полагаю, вы обнаружите, что пустая страница фактически возвращает код состояния 404.Проблема в том, что представление не отображается и, следовательно, пустая страница.
Вместо этого можно отобразить фактическое представление, добавив элемент customErrors в ваш web.config, который будет перенаправлять пользователя на определенный URL-адрес, когдавозникает определенный код состояния, который вы затем можете обработать, как если бы вы использовали любой URL.Вот пошаговое руководство ниже:
Сначала выведите HttpException , где это применимо.При создании исключения обязательно используйте одну из перегрузок, которая принимает код состояния http в качестве параметра, как показано ниже.
throw new HttpException(404, "NotFound");
Затем добавьте пользовательский обработчик ошибок в свой файл web.config, чтобы вы моглиопределить, какое представление должно быть отображено при возникновении вышеуказанного исключения.Вот пример ниже:
<configuration>
<system.web>
<customErrors mode="On">
<error statusCode="404" redirect="~/404"/>
</customErrors>
</system.web>
</configuration>
Теперь добавьте запись маршрута в ваш Global.asax, который будет обрабатывать URL «404», который передаст запрос действию контроллера, которое отобразит представление для вашего404 стр.
Global.asax
routes.MapRoute(
"404",
"404",
new { controller = "Commons", action = "HttpStatus404" }
);
CommonsController
public ActionResult HttpStatus404()
{
return View();
}
Осталось только добавить представление для вышеуказанного действия.
Одно предостережение с указанным выше методом: согласно книге «Pro ASP.NET 4 в C # 2010» (Apress) использование customErrors устарело, если вы используете IIS 7. Вместо этого вам следует использовать httpErrors раздел.Вот цитата из книги:
Но хотя этот параметр все еще работает со встроенным тестовым веб-сервером Visual Studio, он фактически был заменен разделом <httpErrors>
в IIS 7.x.