Problem
kiedy ręcznie ustawiam HTTP Status
strumień odpowiedzi na, powiedzmy, 404
lub 503
IIS renderuje zawartość / widok zapasowy IIS zamiast mojego widoku niestandardowego.
Kiedy robię to za pomocą webowego serwera programistycznego (AKA. Cassini ), działa on poprawnie (to znaczy, moja treść jest wyświetlana, a response.statuscode
== moje wprowadzone dane).
Czy jest jakiś sposób, aby zmienić to zachowanie?
Jak się replikować
Utwórz domyślną aplikację internetową ASP.NET MVC1. Dodaj następującą trasę
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{*catchall}",
new { controller = "Home", action = "Index" }
);
}
Teraz zamień metodę indeksu HomeController na ...
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
Response.StatusCode = 404;
return View();
}
}
źródło
Innym sposobem obejścia tego jest uruchomienie następującego kodu w aplikacji ASP:
Źródło: /programming//a/21271085/238753
źródło
Bądź ostrożny z tym podejściem w ogóle. NIE powinieneś renderować widoku statusu 404.
Myślę, że gdy zwracany jest kod statusu błędu, IIS zwraca zarejestrowaną z nim stronę błędu statusu - a nie dane wyjściowe z przetwarzania. Możesz więc umieścić tam stronę HTML (lub link do strony aspx). http://professionalaspnet.com/archive/2008/02/13/Enforcing-a-Custom-404-Page-in-ASP.NET.aspx ma ładne wyjaśnienie, jak skonfigurować stronę błędu.
Ale to nie ma znaczenia. Sporo przeglądarek domyślnie NIE pokazuje tego wyniku, ale coś ustawionego w przeglądarce. Jeśli więc polegasz na tym, że ludzie widzą twoją stronę 404 - może się tak nie stać. Mogą zobaczyć dla nich stronę 404 skonfigurowaną w przeglądarce.
źródło