Usuário com melhor resposta
Mapear via código o Handler da requisição na classe HttpApplication

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
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.
- Marcado como Resposta Filipe B CastroModerator segunda-feira, 21 de agosto de 2017 13:16
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.
-
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.
-
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.
- Marcado como Resposta Filipe B CastroModerator segunda-feira, 21 de agosto de 2017 13:16
-
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.
-