HTTP Handler: simulare un URL

mercoledì 26 aprile 2006 - 11.40

positron Profilo | Newbie

Ciao a tutti,
Non avendo mai lavorato con gli HTTP Handler ed essendo (quasi) completamente novizio su ASP.NET 2.0, avrei bisogno di qualche dritta.

Lo scenario esemplificativo e' il seguente.

Il sito dispone di una pagina che mostra il prefisso telefonico per la destinazione specificata nell'URL. Per esempio:

[1] http://www.miosito.com/rate.aspx?dest=ROMA

Vorrei e' ottenere lo stesso risultato con URL del tipo:

[2] http://www.mywebsite.com/tariffa_per_ROMA.aspx

Ho creato un HTTP Handler e l'ho assegnato al path "/tariffa_per_*.aspx". Ho provato ad emettere del testo statico in ProcessRequest e questo sembra funzionare correttamente.
Il fatto e' che vorrei che l'intera richiesta [2] venisse servita esattamente come se fosse stato richiesta [1], ma SENZA usare Redirect.
Si consideri che la [1] fornisce una pagina complessa (master page, custom controls, etc.).

Come fare?

Grazie in anticipo!

Paolo Marini

------------------
Nel frattempo ho scovato questo:

http://geekswithblogs.net/flanakin/articles/HttpHandlers.aspx

sembra promettente

Brainkiller Profilo | Guru

>Ciao a tutti,
>Non avendo mai lavorato con gli HTTP Handler ed essendo (quasi)
>completamente novizio su ASP.NET 2.0, avrei bisogno di qualche
>dritta.
>Lo scenario esemplificativo e' il seguente.
>Il sito dispone di una pagina che mostra il prefisso telefonico
>per la destinazione specificata nell'URL. Per esempio:

Ciao PAolo,
è una tecnica che uso spesso anche io, non uso HttpHandlers ma HttpModules. Mi trovo meglio così.

E' sufficiente infatti creare una classe che derivi dall'interfaccia IHttpModule. VS.NET 2005 ti crea automaticamente lo skeleton della classe. A quel punto devi implementare la classe.
Io implemento di solito l'evento Application_BeginRequest. Qui dentro verifico la URL che è stata richiesta dall'utente ed uso Response.RewritePath() per indirizzarlo su una pagina esistente.

Banalmente se viene richiesto:

http://www.sito.com/Pagina_Roma.aspx

devi andare a prendere il testo dopo l'underscore "_" nel nostro caso Roma, fare un lookup su una tabella e recuperare l'ID esempio 1 e usare RewritePath su Citta.aspx?ID=1. L'1 naturalmente lo rimpiazzi con una variabile:

RewritePath("Citta.aspx?ID=" + iID);
return;

A cascata puoi gestire nel BeginRequest vari casi.
Ciao


David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

positron Profilo | Newbie

Ciao David,
Grazie per la risposta.

In effetti sono riuscito a risolvere utilizzando un HTTP Handler.
Cio' che mi mancava era il modo di utilizzare interamente una pagina esistente, cosa fattibile nel ProcessRequest del mio HTTP Handler in questo modo:

context.RewritePath(targetUrl); IHttpHandler handler = PageParser.GetCompiledPageInstance(targetUrlNoQueryString, null, context); handler.ProcessRequest(context);

Il mio handler utilizza un altro handler per processare la richiesta.

Cosa te ne pare?

(soluzione presa da http://geekswithblogs.net/flanakin/articles/HttpHandlers.aspx)
Paolo Marini
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5