データを取得するために使用される文字列を取得するアクションがあります。この文字列でデータが返されない場合(削除された可能性があるため)、404を返してエラーページを表示します。
現在、このアクションに固有のわかりやすいエラーメッセージを表示する特別なビューを返すだけで、アイテムが見つからなかったことを示しています。これは正常に機能しますが、理想的には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;
.NET Coreを使用している場合、return NotFound()
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();
}
私が使う:
Response.Status = "404 NotFound";
これは私のために働く:-)
.NET Core 1.1の場合:
return new NotFoundObjectResult(null);
次のこともできます。
if (response.Data.IsPresent == false)
{
return StatusCode(HttpStatusCode.NoContent);
}