Problème
lorsque je définit manuellement le HTTP Status
flux de réponse sur, disons 404
ou 503
, IIS rend le contenu / la vue IIS stock, au lieu de ma vue personnalisée.
Lorsque je fais cela avec le serveur de développement Web (AKA. Cassini ), cela fonctionne correctement (c'est-à-dire que mon contenu est affiché et response.statuscode
== mes données saisies).
Existe-t-il un moyen de contourner ce comportement?
Comment répliquer
Créez une application Web ASP.NET MVC1 par défaut. Ajoutez l'itinéraire suivant
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{*catchall}",
new { controller = "Home", action = "Index" }
);
}
Remplacez maintenant la méthode Index HomeController par ...
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
Response.StatusCode = 404;
return View();
}
}
la source
Une autre façon de contourner cela est d'exécuter le code suivant dans votre application ASP:
Source: /programming//a/21271085/238753
la source
Soyez prudent avec cette approche en général. Vous ne devez PAS afficher une vue sur l'état 404.
Je pense que lorsqu'un code d'état d'erreur est renvoyé, IIS renvoie la page d'erreur d'état qui est enregistrée avec lui - pas la sortie du traitement. Ainsi, vous pouvez y mettre une page HTML (ou un lien vers une page aspx). http://professionalaspnet.com/archive/2008/02/13/Enforcing-a-Custom-404-Page-in-ASP.NET.aspx a une belle explication sur la façon de configurer une page d'erreur.
Mais ce n'est pas pertinent. Un certain nombre de navigateurs par défaut ne montrent pas cette sortie, mais quelque chose de défini dans le navigateur. Donc, si vous comptez sur les gens qui voient votre page 404 - cela peut ne pas arriver. Ils peuvent voir la page 404 configurée pour eux dans le navigateur.
la source