47 votes

Lancer / retourner un résultat d'action 404 ou une exception dans Asp.net MVC et laisser IIS le gérer

Comment puis-je générer une exception / un résultat 404 ou FileNotFound à partir de mon action et laisser IIS utiliser ma section de configuration customErrors pour afficher la page 404?

J'ai défini mes erreurs personnalisées comme si

 <customErrors mode="On" defaultRedirect="/trouble">
  <error statusCode="404" redirect="/notfound" />
</customErrors>
 

Ma première tentative d'un actionResult qui tente d'ajouter ceci ne fonctionne pas.

 public class NotFoundResult : ActionResult {
    public NotFoundResult() {

    }

    public override void ExecuteResult(ControllerContext context) {
        context.HttpContext.Response.TrySkipIisCustomErrors = false;
        context.HttpContext.Response.StatusCode = 404;
    }
}
 

Mais cela ne montre qu'une page blanche et non ma page / non trouvé

:(

Que devrais-je faire?

133voto

Rob Levine Points 20793

ASP.NET MVC 3 introduit la HttpNotFoundResult action résultat qui doit être utilisé de préférence à lancer manuellement l'exception avec le code d'état http. Cela peut également être retournés par le Contrôleur.HttpNotFound méthode du contrôleur:

public ActionResult MyControllerAction()
{
   ...

   if (someNotFoundCondition)
   {
       return HttpNotFound();
   }
}

Avant MVC 3 vous deviez effectuer les opérations suivantes:

throw new HttpException(404, "HTTP/1.1 404 Not Found");

6voto

Simon Points 11945

Vous pouvez appeler Controller.HttpNotFound

http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.httpnotfound(v=vs.98).aspx

 if (model == null)
{
    return HttpNotFound();
}
 

3voto

tugberk Points 16203

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