Как сгенерировать 404 из view в asp.net core?

Как в asp.net core сгенерировать 404 из кода предстваления?

В mvc можно было сгенерить исключение:
@{
  throw new System.Web.HttpException(404, "Not found");
@


Не могу понять, как такую задачу можно решить в asp.net core
  • Вопрос задан
  • 113 просмотров
Решения вопроса 1
NikFaraday
@NikFaraday
Student full-stack Developer
В asp.net core ЧТО? Blazor Server? Blazor Web Assembly? Razor Pages? Web Api?

Какие исключения? Вы понимаете, что такое исключение на уровне приложения? Это когда программа "отвалилась", произошла ошибка, сервер накрылся, базу данных физически украли, свет отключили или что-то подобное

Ваш HttpException это по факту ошибка работы с протоколом Http, ошибка передачи информации или подобное. И то, даже школьники уже понимают, что ошибки нужно обрабатывать, а не специально генерировать. Если у вас программа будет на сервере, а вас просто сервер накроется из-за такого кода и вам нужно будет лезть и всё заново запускать

Ошибка 404 это просто статус ответ от сервера, который уведомляет вас о том, что запрашиваемый ресурс не найден. Если у вас всё же стоит Web Api, тогда просто в контроллере делаете return NotFound()

Если у вас Razor Pages или MVC, просто сделайте return RedirectToAction("NotFound", "Home") предварительно создав страницу NotFound в контроллере Home
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Zarinov
@Zarinov Автор вопроса
Спасибо, нашел сам.
https://stackoverflow.com/a/41484262/23509114

Вот получившийся код, вдруг кому пригодиться:

/*
 *  ...to startup
 *    app.UseMiddleware<AnsHttpExceptionHandler>();
 */
public class MyHttpException(HttpStatusCode statusCode) : Exception
{
  public HttpStatusCode StatusCode { get; set; } = statusCode;
}

public class MyHttpExceptionHandler(RequestDelegate pipeline)
{
  private readonly RequestDelegate request = pipeline;
  public Task Invoke(HttpContext context) => return InvokeAsync(context);
  async Task InvokeAsync(HttpContext context)
  {
    try { await request(context); }
    catch (AnsHttpException exception)
    {
      context.Response.StatusCode = (int)exception.StatusCode;
      context.Response.Headers.Clear();
    }
  }
}


И пример использования на стороне представления:

@{
  throw new MyHttpException(HttpStatusCode.NotFound);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы