Как создать страницу ошибки 404 с помощью представления (view) в ASP.NET Core?

Как в ASP.NET Core можно сгенерировать ошибку 404 из кода представления? В MVC это делалось с помощью исключения, например:  
<pre><code>@{
  throw new System.Web.HttpException(404, "Not found");
@</code></pre>  
Не могу понять, каким образом решить аналогичную задачу в ASP.NET Core.
  • 18 октября 2024 г. 12:33
Ответы на вопрос 2
В ASP.NET Core нет встроенного метода для генерации ошибки 404 напрямую, как это было в ASP.NET MVC с помощью `HttpException`. Вместо этого вам нужно устанавливать код ответа HTTP и управлять ошибками и статус-кодами с помощью провайдеров middleware.

Чтобы создать страницу ошибки 404 (или любую другую страницу ошибки) с использованием представлений (views), можно использовать следующие шаги:

### 1. Настройка страницы ошибок

Создайте представление, которое будет отображаться при возникновении ошибки 404. Например, создайте файл `NotFound.cshtml` в папке `Views/Shared`:

```html
@{
    ViewData["Title"] = "Page Not Found";
}

<h1>404 - Page Not Found</h1>
<p>Извините, такой страницы не существует.</p>
```

### 2. Конфигурация в `Startup.cs`

В классе `Startup` необходимо добавить обработку ошибок. Включите middleware для обработки ошибок и настройте страницы ошибок:

```csharp
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });

    // Обработка 404 ошибок
    app.UseStatusCodePagesWithReExecute("/Home/NotFound");
}
```

### 3. Обработка 404 ошибок в контроллере

Создайте контроллер (например, `HomeController`) и добавьте метод, который будет возвращать ваше представление для страницы 404:

```csharp
public class HomeController : Controller
{
    // Другие действия

    [Route("Home/NotFound")]
    public IActionResult NotFound()
    {
        return View("NotFound");
    }
}
```

### 4. Генерация ошибки 404 из кода

Теперь, когда вы хотите сгенерировать ошибку 404 в своем контроллере или представлении, вы можете просто вернуть `NotFound()` метод:

```csharp
public IActionResult SomeAction()
{
    // Не нашли нужный ресурс
    return NotFound();
}
```

Или в представлении:

```csharp
@{
    Response.StatusCode = 404; // Устанавливаем код ответа
    return View("NotFound"); // Возвращаем представление 404
}
```

### Резюме

Таким образом, чтобы корректно обрабатывать ошибку 404 в ASP.NET Core, необходимо создать представление для ошибки, настроить middleware и добавить соответствующий метод в контроллер для возврата этого представления. Это позволяет вам контролировать и настраивать поведение вашего приложения в случае, если запрашиваемая страница не найдена.
В 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
Похожие вопросы