Inquiridor
tratamento de erro html

Pergunta
-
pessoal, bom dia.
desenvolvi uma página de erro para tratar esses erros HTML (como página não encontrada 404 etc...)
quando eu digito um página completa que não exite, exemplo: http://meusite.com.br/naoesxiste.aspx eu consigo tratar esse erro e entrar na minha página de tratamento..
pelo que pesquisei na net, quando vc digita um link só até o diretório e ele não existe, o código do erro é o mesmo para a página não encontrada 404.. só que quando faço isso exmplo: http://meusite.com.br/naoesxiste/ não entra na minha página onde faço os tratamentos.. aprece aquela página feia
404 - File or directory not found.
porque não funciona quando é diretório?
Todas as Respostas
-
Bom dia,
O ASP.NET runtime só captura erro durante o processamento do request por isso ele só funciona quando vc coloca .aspx, o erro não é capturado se chamar uma pagina que que não existe ".html" "/" pq nem passa pelo asp.net runtime.
Você tem q criar um handler customizado para fazer o redirecionamento, utilize Transfer que preserva o context para recuperar o erro usando o metodo GetLastError.
http://msdn.microsoft.com/en-us/library/24395wz3(v=vs.100).aspx
Att,
Breno Queiroz
Blog Breno Queiroz- Marcado como Resposta kngipa quinta-feira, 11 de setembro de 2014 12:46
- Editado Breno Queiroz quinta-feira, 11 de setembro de 2014 18:30
- Não Marcado como Resposta kngipa quinta-feira, 11 de setembro de 2014 19:53
-
pessoal.. estou fazendo um teste e não funcionou...
testem: http://192.168.50.42:1911/a ou http://192.168.50.42:1911/a.aspx
criei essa rotina:
global.asax
void Application_Error(object sender, EventArgs e) { Exception exc = Server.GetLastError(); // Handle HTTP errors if (exc.GetType() == typeof(HttpException)) { // The Complete Error Handling Example generates // some errors using URLs with "NoCatch" in them; // ignore these here to simulate what would happen // if a global.asax handler were not implemented. if (exc.Message.Contains("NoCatch")) return; //Redirect HTTP errors to HttpError page Server.Transfer("erro.aspx", true); Server.ClearError(); } }
minha página de erro
protected void Page_Load(object sender, EventArgs e) { string strUrlRemetente = Request.Url.AbsoluteUri; HttpContext.Current.Response.Clear(); HttpContext.Current.Response.Status = "302 Moved Permanently"; HttpContext.Current.Response.AddHeader("Location", "http://www.google.com.br"); HttpContext.Current.Response.End(); }
-
Esse tutorial explica de forma mais clara:
http://www.codeproject.com/Articles/10593/Error-Handling-in-ASP-NET
A pagina de erro que vc configura so vai mostrar para as extensões mapeadas no aspnet_isapi no IIS, então para suporta a mesma pagina de erro para .html vc teria que cadastrar ela
No IIS6:
- Entra no IIS Manager
- Seleciona sua aplicacao
- Botao direito -> Properties
- Na aba Virtual Directory clique em Configuration
- Na coluna de Extension procure por .aspx de um duplo clique e copia o caminho para a dll aspnet_isapi.dll deve ser algo C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll
- Clique em Add e cole o caminho da dll na caixa Executable e na caixa Extension digite .html
- Tenha CERTEZA que o checkbox "Check that file exists" esta DESMARCADO
NO IIS7:
Essa configuração fica em <handlers>, basta setar resourceType="Unspecified" , dessa forma o handler sempre sera executado mesmo que não exista arquivo/diretório.
<add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%windir%\system32\inetsrv\asp.dll" resourceType="Unspecified" />
- Editado Breno Queiroz quinta-feira, 11 de setembro de 2014 20:36
-
-
Qual a sua versão do IIS ?
-
-
http://imageresizing.net/docs/install/classicmode
Voce tem q fazer o cadastro da dll aspnet_isapi.dll e desmarca a opção "check file exists", procura direito a opção properties no IIS apos clicar com o botao direito no WEBSITE.
-
-
Boa noite,
Experimente adicionar a chave abaixo no web.config do seu projeto.
Do jeito que está, só será redirecionado para uma página de erro quando o acesso da aplicação for remoto, caso o acesso for do próprio servidor o erro será exibido normalmente.
<customErrors defaultRedirect="Pagina_Erro_Generica" mode="RemoteOnly">
<error statusCode="403" redirect="Pagina_Erro_AcessoNegado" />
<error statusCode="404" redirect="Pagina_Erro_NaoEncontrado" /></customErrors>
Abs.