Problema
quando defino manualmente o HTTP Status
fluxo de resposta como, digamos, 404
ou 503
, o IIS renderiza o conteúdo / exibição do IIS em estoque, em vez da minha exibição personalizada.
Quando faço isso com o servidor de desenvolvimento da web (AKA. Cassini ), ele funciona corretamente (ou seja, meu conteúdo é exibido e os response.statuscode
== meus dados inseridos).
Existe alguma maneira de substituir esse comportamento?
Como replicar
Crie um aplicativo Web ASP.NET MVC1 padrão. Adicione a seguinte rota
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{*catchall}",
new { controller = "Home", action = "Index" }
);
}
Agora substitua o método Index do HomeController por ...
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
Response.StatusCode = 404;
return View();
}
}
fonte
Outra maneira de contornar isso é executar o seguinte código no aplicativo ASP:
Fonte: /programming//a/21271085/238753
fonte
Tenha cuidado com essa abordagem em geral. Você NÃO deve exibir o status 404.
Acho que quando um código de status de erro é retornado, o IIS retorna a página de erro de status registrada com ele - não a saída do processamento. Então, você pode colocar uma página HTML lá (ou um link para uma página aspx). http://professionalaspnet.com/archive/2008/02/13/Enforcing-a-Custom-404-Page-in-ASP.NET.aspx tem uma boa explicação sobre como configurar uma página de erro.
Mas isso é irrelevante. Muitos navegadores, por padrão, NÃO mostram essa saída, mas algo definido no navegador. Portanto, se você confiar nas pessoas que visualizam sua página 404 - isso pode não acontecer. Eles podem ver a página 404 configurada no navegador para eles.
fonte