web-dev-qa-db-fra.com

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

comment puis-je lever une exception/résultat 404 ou FileNotFound 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 ça

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

Ma première tentative d'un actionResult qui essaie d'ajouter cela 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 montre juste une page vierge et non ma page/non trouvée

:(

Que devrais-je faire?

47
CVertex

ASP.NET MVC 3 a introduit le résultat de l'action HttpNotFoundResult qui doit être utilisé de préférence pour lever manuellement l'exception avec le code d'état http. Cela peut également être retourné via la méthode Controller.HttpNotFound sur le 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");
133
Rob Levine

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();
}
6
Simon
2
tugberk