Estou tentando fazer uma página de erro HTTP 404 personalizada quando alguém digita uma URL que não invoca uma ação ou controlador válido no ASP.NET MVC, em vez de exibir o erro genérico de ASP.NET "Recurso não encontrado".
Não quero usar o web.config para lidar com isso.
Existe algum tipo de mágica de roteamento que eu possa fazer para capturar URLs inválidos?
Atualização: tentei a resposta dada, mas ainda recebo a mensagem feia "Recurso não encontrado".
Outra atualização: Ok, aparentemente algo mudou no RC1. Eu até tentei especificamente capturar 404 em um HttpException
e ainda me mostra a página "Recurso não encontrado".
Eu até usei o recurso de recurso do MvcContrib e nada - mesmo problema. Alguma ideia?
Respostas:
Basta adicionar "pegar todas as rotas" no final da tabela de rotas e exibir a página desejada com ela.
Veja: Como posso fazer uma rota "pega-tudo" para lidar com consultas '404 página não encontrada' para ASP.NET MVC?
fonte
Eu tentei habilitar erros personalizados no servidor de produção por 3 horas, parece que encontrei a solução final de como fazer isso na ASP.NET MVC sem nenhuma rota.
Para habilitar erros personalizados no aplicativo ASP.NET MVC, precisamos (IIS 7+):
Configure páginas personalizadas na configuração da web na
system.web
seção:RemoteOnly
significa que na rede local você verá erros reais (muito útil durante o desenvolvimento). Também podemos reescrever a página de erro para qualquer código de erro.Defina o parâmetro de resposta mágica e o código de status de resposta (no módulo de tratamento de erros ou no atributo de tratamento de erros)
Defina outra configuração mágica na configuração da web na
system.webServer
seção:Esta foi a última coisa que encontrei e depois disso posso ver erros personalizados no servidor de produção.
fonte
customErrors
resultados em um redirecionamento 302 apenas para carregar sua página de erro.Eu fiz meu tratamento de erros funcionar criando um ErrorController que retorna as visualizações neste artigo. Também tive que adicionar "Catch All" à rota em global.asax.
Não consigo ver como ele chegará a qualquer uma dessas páginas de erro se não estiver no Web.config ..? Meu Web.config precisava especificar:
e também adicionei:
fonte
Fonte
NotFoundMVC - Fornece uma página 404 amigável sempre que um controlador, ação ou rota não é encontrado em seu aplicativo ASP.NET MVC3. Uma exibição chamada NotFound é renderizada em vez da página de erro ASP.NET padrão.
Você pode adicionar este plug-in via nuget usando: Install-Package NotFoundMvc
NotFoundMvc se instala automaticamente durante a inicialização do aplicativo da web. Ele lida com todas as maneiras diferentes que uma 404 HttpException normalmente é lançada pela ASP.NET MVC. Isso inclui um controlador, ação e rota ausentes.
Guia de instalação passo a passo:
1 - Clique com o botão direito em seu projeto e selecione Gerenciar pacotes de Nuget ...
2 - Procure
NotFoundMvc
e instale-o.3 - Assim que a instalação for concluída, dois arquivos serão adicionados ao seu projeto. Conforme mostrado nas imagens abaixo.
4 - Abra o novo NotFound.cshtml adicionado presente em Views / Shared e modifique-o à sua vontade. Agora execute o aplicativo e digite um url incorreto, e você será saudado com uma página 404 amigável.
Não mais, os usuários receberão mensagens de erro como
Server Error in '/' Application. The resource cannot be found.
Espero que isto ajude :)
PS: Parabéns a Andrew Davey por fazer um plugin tão incrível.
fonte
Tente isso em web.config para substituir as páginas de erro do IIS. Essa é a melhor solução, eu acho, e também envia o código de status correto.
Mais informações de Tipila - Use páginas de erro personalizadas ASP.NET MVC
fonte
Esta solução não precisa de alterações no arquivo web.config ou rotas pega-tudo.
Primeiro, crie um controlador como este;
Em seguida, crie a visualização em "Views / Error / Index.cshtml" como;
Em seguida, adicione o seguinte no arquivo asax global conforme abaixo:
Se você ainda obtiver a página de erro personalizada do IIS após fazer isso, certifique-se de que as seções a seguir estejam comentadas (ou vazias) no arquivo de configuração da web:
fonte
Response.End();
ao final de seu manipulador Application_Error. Sem isso, apenas a primeira ocorrência de um erro é disparada para uma determinada sessão, o que é um problema quando você tem, por exemplo, um registro de erro personalizado no manipulador Application_Error.Se você trabalha no MVC 4, pode assistir a este solução, funcionou para mim.
Adicione o seguinte método Application_Error ao meu
Global.asax
:O controlador em si é muito simples:
Verifique o código-fonte completo de Mvc4CustomErrorPage no GitHub .
fonte
Eu tive o mesmo problema, o que você deve fazer é, em vez de adicionar o atributo customErrors no arquivo web.config na sua pasta Views, você deve adicioná-lo no arquivo web.config na pasta raiz do seu projeto
fonte
Aqui está a resposta verdadeira que permite personalizar totalmente a página de erro em um único lugar. Não há necessidade de modificar web.config ou criar código separado.
Funciona também em MVC 5.
Adicione este código ao controlador:
Baseado em http://www.eidias.com/blog/2014/7/2/mvc-custom-error-pages
fonte
Vou falar sobre alguns casos específicos,
se você estiver usando o 'método PageNotFound' no HomeController como abaixo
não funcionaria isso. Mas você deve limpar as tags de rota como abaixo,
E se você alterá-lo como o nome do método em web.config, ele funciona. No entanto, não se esqueça de fazer o código abaixo em web.config
fonte