wake-up-neo.com

So rufen Sie die MVC-Aktion auf, um 404 zurückzugeben

Ich habe eine Aktion, die eine Zeichenfolge übernimmt, die zum Abrufen einiger Daten verwendet wird. Wenn diese Zeichenfolge dazu führt, dass keine Daten zurückgegeben werden (möglicherweise, weil sie gelöscht wurden), möchte ich eine 404 zurückgeben und eine Fehlerseite anzeigen.

Ich verwende derzeit nur die Rückgabe einer speziellen Ansicht, in der eine benutzerfreundliche Fehlermeldung speziell für diese Aktion angezeigt wird, die besagt, dass das Element nicht gefunden wurde. Dies funktioniert einwandfrei, möchte aber im Idealfall einen 404-Statuscode zurückgeben, damit Suchmaschinen wissen, dass dieser Inhalt nicht mehr vorhanden ist, und ihn aus den Suchergebnissen entfernen können.

Was ist der beste Weg, um dies zu tun?

Ist es so einfach wie das Setzen von Response.StatusCode = 404?

134
Paul Hiles

Es gibt mehrere Möglichkeiten, dies zu tun.

  1. Sie haben Recht mit dem allgemeinen Aspx-Code, der auf die von Ihnen festgelegte Weise zugewiesen werden kann
  2. throw new HttpException(404, "Some description");
104
Dewfy

In ASP.NET MVC 3 und höher können Sie ein HttpNotFoundResult vom Controller zurückgeben.

return new HttpNotFoundResult("optional description");
144

In MVC 4 und höher können Sie die integrierten Hilfsmethoden HttpNotFound verwenden:

if (notWhatIExpected)
{
    return HttpNotFound();
}

oder

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

Code:

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

Ich habe das benutzt:

Response.StatusCode = 404;
return null;
12
Wout

Wenn Sie mit .NET Core arbeiten, können Sie return NotFound()

8
Robert Paulsen

In NerdDinner zB. Versuchen Sie es

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

Keines der obigen Beispiele hat für mich funktioniert, bis ich die mittlere Zeile unten hinzugefügt habe:

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

Ich benutze:

Response.Status = "404 NotFound";

Das funktioniert bei mir :-)

2
bruno

In .NET Core 1.1:

return new NotFoundObjectResult(null);
1
feedthedogs

Sie können auch tun:

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