Ответ 1
Если вы проверяете ответ с помощью скрипача, я считаю, что вы обнаружите, что пустая страница фактически возвращает код состояния 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 в С# 2010" (Apress) использование customErrors устарело, используя IIS 7. Вместо этого вы должны использовать раздел httpErrors. Вот цитата из книги:
Но хотя этот параметр по-прежнему работает с встроенной тестовой сетью Visual Studios сервер, его фактически заменили секцией
<httpErrors>
в IIS 7.x.