Возврат 404 в публичном асинхронном Task OnGet (строковый слаг) в Razor Pages, если слаг отсутствует в CMS - PullRequest
0 голосов
/ 25 октября 2018

У меня есть следующий метод модели страницы:

public class CarModel : PageModel
    {
public Car Car { get; private set; }

public async Task OnGet(string slug)
        {



            var client = clientManager.GetClient();


            var carPages = await client.GetBySlugAsync();

            CarPages= carPages.Items[0];

// if carPages.Items is null, out of range, or if CarPages is null, then return a 404

        }
}

Страница Razor:

@page "/{slug}"
@model CarModel
@{
    ViewData["Title"] = "Some title";
}

<div>Some markup</div>

Если я введу в браузере слаг, который не существует в CMS, тогда я хочуметод OnGet для возврата 404. Как мне это сделать (пример передовой практики)?

(в настоящее время, если я введу несуществующий слаг в браузере, нажму return, я получу ошибку сервера)

В документах Microsoft для Razor Pages не найдено ни одного примера.

1 Ответ

0 голосов
/ 25 октября 2018

Используйте метод NotFound, который возвращает NotFoundResult:

var carPages = await client.GetBySlugAsync();
if(!carPages.Any()) // or whatever the appropriate test is for your data type here
{
    return NotFound();
}
else
{ 
    return Page();
}

Вам потребуется изменить подпись метода OnGet, чтобы получить IActionResult:

public async Task<IActionResult> OnGet(string slug)

Подробнее об ассортименте ActionResult доступных типов: https://www.learnrazorpages.com/razor-pages/action-results

...