Если роутер не совпадает, как вернуть 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();
}

Осталось только добавить представление для вышеуказанного действия.

Другие вопросы по тегам