Ответ 1
Существует несколько способов сделать это,
- Вы можете использовать обычный код aspx, который может быть назначен указанным вами способом.
-
throw new HttpException(404, "Some description");
У меня есть действие, которое принимает строку, которая используется для извлечения некоторых данных. Если эта строка не приводит к возврату данных (возможно, потому, что она была удалена), я хочу вернуть 404 и отобразить страницу с ошибкой.
В настоящее время я просто использую return специальное представление, отображающее дружественное сообщение об ошибке, относящееся к этому действию, в котором говорится, что элемент не найден. Это прекрасно работает, но в идеале хотелось бы вернуть код статуса 404, чтобы поисковые системы знали, что это содержимое больше не существует и может удалить его из результатов поиска.
Каков наилучший способ сделать это?
Это так же просто, как установка Response.StatusCode = 404?
Существует несколько способов сделать это,
throw new HttpException(404, "Some description");
В ASP.NET MVC 3 и выше вы можете вернуть HttpNotFoundResult из контроллера.
return new HttpNotFoundResult("optional description");
В MVC 4 и выше вы можете использовать встроенные методы HttpNotFound
:
if (notWhatIExpected)
{
return HttpNotFound();
}
или
if (notWhatIExpected)
{
return HttpNotFound("I did not find message goes here");
}
Код:
if (id == null)
{
throw new HttpException(404, "Your error message");//RedirectTo NoFoundPage
}
Web.config
<customErrors mode="On">
<error statusCode="404" redirect="/Home/NotFound" />
</customErrors>
Я использовал это:
Response.StatusCode = 404;
return null;
В NerdDinner, например. Попробуйте it
public ActionResult Details(int? id) {
if (id == null) {
return new FileNotFoundResult { Message = "No Dinner found due to invalid dinner id" };
}
...
}
Ни один из приведенных выше примеров не работал у меня, пока я не добавил среднюю строку ниже:
public ActionResult FourOhFour()
{
Response.StatusCode = 404;
Response.TrySkipIisCustomErrors = true; // this line made it work
return View();
}
Если вы работаете с .NET Core, вы можете return NotFound()
Я использую:
Response.Status = "404 NotFound";
Это работает для меня: -)
В .NET Core 1.1:
return new NotFoundObjectResult(null);
Вы также можете сделать:
if (response.Data.IsPresent == false)
{
return StatusCode(HttpStatusCode.NoContent);
}
Попробуйте следующий демонстрационный код:
public ActionResult Test()
{
return new HttpStatusCodeResult (404,"Not found");
}