Подтвердить что ты не робот

Как получить действие MVC для возврата 404

У меня есть действие, которое принимает строку, которая используется для извлечения некоторых данных. Если эта строка не приводит к возврату данных (возможно, потому, что она была удалена), я хочу вернуть 404 и отобразить страницу с ошибкой.

В настоящее время я просто использую return специальное представление, отображающее дружественное сообщение об ошибке, относящееся к этому действию, в котором говорится, что элемент не найден. Это прекрасно работает, но в идеале хотелось бы вернуть код статуса 404, чтобы поисковые системы знали, что это содержимое больше не существует и может удалить его из результатов поиска.

Каков наилучший способ сделать это?

Это так же просто, как установка Response.StatusCode = 404?

4b9b3361

Ответ 1

Существует несколько способов сделать это,

  • Вы можете использовать обычный код aspx, который может быть назначен указанным вами способом.
  • throw new HttpException(404, "Some description");

Ответ 2

В ASP.NET MVC 3 и выше вы можете вернуть HttpNotFoundResult из контроллера.

return new HttpNotFoundResult("optional description");

Ответ 3

В MVC 4 и выше вы можете использовать встроенные методы HttpNotFound:

if (notWhatIExpected)
{
    return HttpNotFound();
}

или

if (notWhatIExpected)
{
    return HttpNotFound("I did not find message goes here");
}

Ответ 4

Код:

if (id == null)
{
  throw new HttpException(404, "Your error message");//RedirectTo NoFoundPage
}

Web.config

<customErrors mode="On">
  <error statusCode="404" redirect="/Home/NotFound" />
</customErrors>

Ответ 5

Я использовал это:

Response.StatusCode = 404;
return null;

Ответ 6

В NerdDinner, например. Попробуйте it

public ActionResult Details(int? id) {
    if (id == null) {
        return new FileNotFoundResult { Message = "No Dinner found due to invalid dinner id" };
    }
    ...
}

Ответ 7

Ни один из приведенных выше примеров не работал у меня, пока я не добавил среднюю строку ниже:

public ActionResult FourOhFour()
{
    Response.StatusCode = 404;
    Response.TrySkipIisCustomErrors = true; // this line made it work
    return View();
}

Ответ 8

Если вы работаете с .NET Core, вы можете return NotFound()

Ответ 9

Я использую:

Response.Status = "404 NotFound";

Это работает для меня: -)

Ответ 10

В .NET Core 1.1:

return new NotFoundObjectResult(null);

Ответ 11

Вы также можете сделать:

        if (response.Data.IsPresent == false)
        {
            return StatusCode(HttpStatusCode.NoContent);
        }

Ответ 12

Попробуйте следующий демонстрационный код:

public ActionResult Test()

{
  return new HttpStatusCodeResult (404,"Not found");
}