Si vous inspectez la réponse en utilisant fiddler, je pense que vous constaterez que la page blanche renvoie en fait un code d'état 404. Le problème est qu'aucune vue n'est rendue et donc la page blanche.
Vous pouvez afficher une vue réelle à la place en ajoutant un élément customErrors à votre web.config qui redirigera l'utilisateur vers une url spécifique lorsqu'un certain code d'état se produit, que vous pourrez ensuite gérer comme vous le feriez avec n'importe quelle url. Voici un exemple ci-dessous :
Lancez d'abord le HttpException le cas échéant. Lorsque vous instanciez l'exception, assurez-vous d'utiliser l'une des surcharges qui prend un code d'état http comme paramètre, comme ci-dessous.
throw new HttpException(404, "NotFound");
Ajoutez ensuite un gestionnaire d'erreur personnalisé dans votre fichier web.config afin de pouvoir déterminer quelle vue doit être rendue lorsque l'exception ci-dessus se produit. Voici un exemple ci-dessous :
<configuration>
<system.web>
<customErrors mode="On">
<error statusCode="404" redirect="~/404"/>
</customErrors>
</system.web>
</configuration>
Maintenant, ajoutez une entrée de route dans votre Global.asax qui traitera l'url "404" et transmettra la requête à l'action d'un contrôleur qui affichera la vue de votre page 404.
Global.asax
routes.MapRoute(
"404",
"404",
new { controller = "Commons", action = "HttpStatus404" }
);
CommonsController
public ActionResult HttpStatus404()
{
return View();
}
Il ne reste plus qu'à ajouter une vue pour l'action ci-dessus.
Une mise en garde concernant la méthode ci-dessus : selon le livre "Pro ASP.NET 4 in C# 2010" (Apress), l'utilisation de la fonction Erreurs personnalisées est obsolète si vous utilisez IIS 7. Vous devez plutôt utiliser la fonction httpErrors section. Voici une citation du livre :
Mais bien que ce paramètre fonctionne toujours avec le test web intégré de Visual Studio de test intégré à Visual Studio, il a été remplacé par l'option <httpErrors>
dans IIS 7.x.