137 votes

Comment faire en sorte que l'action MVC renvoie 404

J'ai une action qui prend une chaîne de caractères qui est utilisée pour récupérer des données. Si cette chaîne ne renvoie aucune donnée (peut-être parce qu'elle a été supprimée), je veux renvoyer un message 404 et afficher une page d'erreur.

Actuellement, j'utilise simplement le retour d'une vue spéciale qui affiche un message d'erreur convivial spécifique à cette action indiquant que l'élément n'a pas été trouvé. Cela fonctionne bien, mais j'aimerais idéalement renvoyer un code d'état 404 pour que les moteurs de recherche sachent que ce contenu n'existe plus et puissent le supprimer des résultats de recherche.

Quelle est la meilleure façon de procéder ?

Est-ce aussi simple que de définir Response.StatusCode = 404 ?

146voto

noah1989 Points 1893

En ASP.NET MVC 3 et plus, vous pouvez renvoyer un fichier de type HttpNotFoundResult du contrôleur.

return new HttpNotFoundResult("optional description");

107voto

Dewfy Points 11277

Il existe plusieurs façons de procéder,

  1. Vous avez raison, dans le code aspx commun, il peut être assigné de la manière que vous avez spécifiée.
  2. throw new HttpException(404, "Some description");

59voto

TrueBlueAussie Points 26794

Dans MVC 4 et supérieur, vous pouvez utiliser la fonction intégrée HttpNotFound méthodes d'aide :

if (notWhatIExpected)
{
    return HttpNotFound();
}

o

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

25voto

Sinan BARAN Points 129

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>

12voto

Wout Points 421

J'ai utilisé ça :

Response.StatusCode = 404;
return null;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X