Если роутер не совпадает, как вернуть 404?
public class BookController : Controller
{
public ActionResult Show(int bid)
{
return View();
}
}
routes.MapRoute(
name: "Show",
url: "Book/{bid}/",
defaults: new {controller = "Book", action = "Show"},
constraints: new {bid = @"\d+"}
);
если посетить
/ Книга / тест /
вернет ошибку 500, как вернуть ошибку 404?
если роутер не совпадает, как вернуть 404?
1 ответ
Вместо этого вы можете отобразить фактическое представление, добавив элемент 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();
}
Осталось только добавить представление для вышеуказанного действия.