web-dev-qa-db-ja.com

404を返すMVCアクションを取得する方法

データを取得するために使用される文字列を取得するアクションがあります。この文字列でデータが返されない場合(削除された可能性があるため)、404を返してエラーページを表示します。

現在、このアクションに固有のわかりやすいエラーメッセージを表示する特別なビューを返すだけで、アイテムが見つからなかったことを示しています。これは正常に機能しますが、理想的には404ステータスコードを返したいので、検索エンジンはこのコンテンツがもう存在しないことを認識し、検索結果から削除できます。

これについて行く最善の方法は何ですか?

Response.StatusCode = 404を設定するのと同じくらい簡単ですか?

134
Paul Hiles

それを行うには複数の方法がありますが、

  1. あなたは、指定された方法で割り当てることができる一般的なaspxコードで正しいです
  2. throw new HttpException(404, "Some description");
104
Dewfy

ASP.NET MVC 3以降では、コントローラーから HttpNotFoundResult を返すことができます。

return new HttpNotFoundResult("optional description");
144

MVC 4以降では、組み込みのHttpNotFoundヘルパーメソッドを使用できます。

if (notWhatIExpected)
{
    return HttpNotFound();
}

または

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

コード:

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

Web.config

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

私はこれを使用しました:

Response.StatusCode = 404;
return null;
12
Wout

.NET Coreを使用している場合、return NotFound()

8
Robert Paulsen

NerdDinnerの例試す it

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

下の真ん中の行を追加するまで、上記の例はどれも役に立ちませんでした。

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

私が使う:

Response.Status = "404 NotFound";

これは私のために働く:-)

2
bruno

.NET Core 1.1の場合:

return new NotFoundObjectResult(null);
1
feedthedogs

次のこともできます。

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