none
Mapear via código o Handler da requisição na classe HttpApplication RRS feed

  • Pergunta

  • Como faço, em na classe derivada do "HttpApplication" (usada no "Global.asax") para interceptar os endereços requisitados e entregar um Handler próprio (derivado de uma classe "Page"), sem um arquivo "aspx"?

    Já li a descrição da classe no MSDN. Também já li "ASP.NET Application Life Cycle Overview for IIS 7.0", que inclusive mostra como colocar as configurações no "web.config"; eu quero pular essa parte, e associar diretamente via código.

    O que fiz errado abaixo? Porque ele simplesmente retorna o erro que a página "teste.aspx" não existe.

        public class TestPage : global::System.Web.UI.Page
        {
            protected override void Render(global::System.Web.UI.HtmlTextWriter writer)
            {
                writer.Write("<html><head><title>Sim</title></head><body><p>SIM!</p></body></html>");
            }
        }
    
        public class Application : global::System.Web.HttpApplication
        {
            protected void Application_BeginRequest(object sender, global::System.EventArgs e)
            {
                //Algo aqui?
            }
    
            protected void Application_AuthenticateRequest(object sender, global::System.EventArgs e)
            {
                //Algo aqui?
            }
    
            protected void Application_MapRequestHandler(object sender, global::System.EventArgs e)
            {
                if (this.Request.Url.AbsolutePath == "/teste.aspx")
                {
                    this.Context.Handler = new TestPage();
                }
            }
    
            public Application() : base()
            {
                this.AuthenticateRequest += this.Application_AuthenticateRequest;
                this.BeginRequest += this.Application_BeginRequest;
                this.MapRequestHandler += this.Application_MapRequestHandler;
            }
        }

    • Editado SammuelMiranda sexta-feira, 11 de agosto de 2017 12:56 Organizando o código
    quinta-feira, 10 de agosto de 2017 12:18

Respostas

  • Boa tarde, SammuelMiranda. Tudo bem?

    Conseguiu resolver ou avançar nesse caso?

    Por favor nos diga, para que a comunidade possa ver e possamos te ajudar.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 18 de agosto de 2017 19:58
    Moderador

Todas as Respostas

  • Boa tarde, SammuelMiranda. Tudo bem?

    Poderia explicar um pouco melhor o que você precisa?

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 10 de agosto de 2017 19:49
    Moderador
  • Ok Felipe; eu editei o código acima um pouco só para ficar mais organizado.

    Imagina que eu abri um projeto novo no Visual Studio (Web), como WebForms.
    Nesse projeto não tem NENHUM arquivo ASPX; NADA!

    O único arquivo "*.cs" contém o código que postei na minha pergunta.
    O que quero é que meu programa tenha apenas a DLL, e mais nada; por isso (como pode ver na classe "TestPage"), ao invés de fazer uma página ASPX, colocar no codebehind dela os métodos, eu sobrescrevi o método "Render" para gerar a resposta que a página deve fazer (note que ela deriva da classe "Page").

    Escrevi então uma classe que deriva de "HttpApplication", e nos métodos dela eu quero que ele use a classe "TestPage" para fazer toda e qualquer resposta a chamadas para o endereço "localhost/teste.aspx". O dito arquivo "teste.aspx" NÃO EXISTE, pois se existisse seria apenas isso:

    <%@ Page Language="C#" Inherits="TestPage" %>

    E nada mais. De fato, se eu fizer um arquivo "Teste.aspx", derivar ele da classe "TestPage" e colocar apenas esse markup, funciona. O que quero é eliminar completamente o markup e fazer a classe inteiramente por código.

    Preciso, no processo do HttpApplication, que ele interprete o endereço URL da requisição e, por um "switch (URL)", se igual a "localhost/teste.aspx" use a classe TestPage como handler.

    sexta-feira, 11 de agosto de 2017 13:03
  • Boa tarde, SammuelMiranda. Tudo bem?

    Conseguiu resolver ou avançar nesse caso?

    Por favor nos diga, para que a comunidade possa ver e possamos te ajudar.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 18 de agosto de 2017 19:58
    Moderador
  • Bom dia,

    Por falta de retorno, essa thread está encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 21 de agosto de 2017 13:17
    Moderador
  • Não Felipe, não avancei no caso, mas deixei o projeto como está nesse ponto.
    quinta-feira, 24 de agosto de 2017 18:26