Problem
Wenn ich den Wert HTTP Status
meines Antwort-Streams manuell auf " 404
oder" 503
stelle, rendert IIS den aktuellen IIS-Inhalt / die aktuelle IIS-Ansicht anstelle meiner benutzerdefinierten Ansicht.
Wenn ich das mit dem Webentwicklungsserver (AKA. Cassini ) mache , funktioniert es korrekt (das heißt, mein Inhalt wird angezeigt und die response.statuscode
== meine eingegebenen Daten).
Kann ich dieses Verhalten auf irgendeine Weise außer Kraft setzen?
Replizieren
Erstellen Sie eine Standard-ASP.NET MVC1-Webanwendung. Fügen Sie die folgende Route hinzu
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{*catchall}",
new { controller = "Home", action = "Index" }
);
}
Ersetzen Sie nun die Index-Methode des HomeControllers durch ...
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
Response.StatusCode = 404;
return View();
}
}
quelle
Eine andere Möglichkeit, dies zu umgehen, besteht darin, den folgenden Code in Ihrer ASP-Anwendung auszuführen:
Quelle: /programming//a/21271085/238753
quelle
Seien Sie vorsichtig mit diesem Ansatz im Allgemeinen. Sie sollten KEINE Sicht auf den 404-Status rendern.
Ich denke, wenn ein Fehlerstatuscode zurückgegeben wird, gibt IIS die Statusfehlerseite zurück, die bei ihm registriert ist - nicht die Ausgabe der Verarbeitung. Sie können dort also eine HTML-Seite (oder einen Link zu einer Aspx-Seite) einfügen. http://professionalaspnet.com/archive/2008/02/13/Enforcing-a-Custom-404-Page-in-ASP.NET.aspx enthält eine nützliche Erklärung zum Einrichten einer Fehlerseite.
Das ist aber irrelevant. Eine ganze Reihe von Browsern zeigt standardmäßig NICHT diese Ausgabe an, sondern etwas, das im Browser eingestellt ist. Wenn Sie sich also darauf verlassen, dass die Leute Ihre 404-Seite sehen, kann dies nicht passieren. Sie sehen möglicherweise die 404-Seite, die im Browser für sie eingerichtet ist.
quelle