none
tratamento de erro html RRS feed

  • 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?

    quinta-feira, 11 de setembro de 2014 11:41

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
    quinta-feira, 11 de setembro de 2014 12:43
  • 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();
        }

    quinta-feira, 11 de setembro de 2014 19:56
  • 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" />


    Blog Breno Queiroz – MCP



    • Editado Breno Queiroz quinta-feira, 11 de setembro de 2014 20:36
    quinta-feira, 11 de setembro de 2014 20:23
  • identifiquei que somente quando digito um endereço com final .aspx que minha página de erro é executada.. fora isso o erro que acontece é o mesmo 404, porém o default do iis..  
    sexta-feira, 12 de setembro de 2014 13:55
  • Qual a sua versão do IIS ?

    Blog Breno Queiroz – MCP

    sexta-feira, 12 de setembro de 2014 14:19
  • Meu iis é o 6.1
    sexta-feira, 12 de setembro de 2014 14:40
  • 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.


    Blog Breno Queiroz – MCP

    sexta-feira, 12 de setembro de 2014 15:13
  • já tenho esse cara instalado
    sexta-feira, 12 de setembro de 2014 15:48
  • 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.

    quarta-feira, 1 de outubro de 2014 01:19