У меня есть действие, которое принимает строку, которая используется для получения некоторых данных. Если эта строка не приводит к возврату данных (возможно, потому, что она была удалена), я хочу вернуть 404 и отобразить страницу с ошибкой.
В настоящее время я просто использую специальное представление return, которое отображает дружественное сообщение об ошибке, относящееся к этому действию, о том, что элемент не найден. Это работает нормально, но в идеале хотелось бы вернуть код состояния 404, чтобы поисковые системы знали, что этот контент больше не существует, и могли удалить его из результатов поиска.
Как лучше всего это сделать?
Это так же просто, как установить Response.StatusCode = 404?
Ответы:
Есть несколько способов сделать это,
throw new HttpException(404, "Some description");
источник
В ASP.NET MVC 3 и выше вы можете вернуть HttpNotFoundResult из контроллера.
return new HttpNotFoundResult("optional description");
источник
return new HttpNotFoundResult("optional description");
HttpNotFound()
. Чтобы вы могли вернутьсяreturn HttpNotFound("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;
источник
Если вы работаете с .NET Core, вы можете
return NotFound()
источник
Например, в NerdDinner. Попробуйте это
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(); }
источник
return HttpNotFound();
не работает для вас? Сколько лет вашей системе?return HttpNotFound();
? Он отлично работает с MVC 4 и выше. msdn.microsoft.com/en-us/library/… "Свойство TrySkipIisCustomErrors используется только в том случае, если ваше приложение размещено в IIS 7.0. При работе в классическом режиме в IIS 7.0 значение свойства TrySkipIisCustomErrors по умолчанию равно true. При работе в интегрированном режиме , для свойства TrySkipIisCustomErrors по умолчанию установлено значение false. "Я использую:
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"); }
источник