HttpHandler non viene eseguito
-
Sunday, May 06, 2012 9:49 AM
Ciao a tutti,
sto provando per la prima volta a implementare un httphandler, come esempio vorrei intercettare tutti i file con estensione .prova
Il mio ambiente di sviluppo è VS2010, Framework 4.0 senza IIS installato (utilizzo l'Asp.Net Development Server)
Seguendo i vari esempi trovati in rete, ho creato l'httphanderl (in un WebSite) e l'ho posizionato nella cartella App_code:
public class HandlErr : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/plain"; context.Response.Write("Hello World"); } public bool IsReusable { get { return false; } }e lo inserisco nel web.config:
<system.webServer> <handlers> <add name="HandlErr" verb="*" path="*.prova" type="HandlErr, App_Code"/> </handlers> </system.webServer>il problema è che, provando a effettuare una richiesta, non avviene nulla... Se metto un break point nella ProcessRequest, non si ferma...
E' possibile che dipenda dal Asp.Net Development Server? Nel senso, è necessaria qualche altra operazione oltre a quelle che ho fatto?
Grazie :)
- Edited by PowerLower Sunday, May 06, 2012 9:50 AM
- Edited by PowerLower Sunday, May 06, 2012 9:51 AM
- Edited by PowerLower Sunday, May 06, 2012 9:51 AM
All Replies
-
Sunday, May 06, 2012 10:39 AMAnswerer
La sezione system.webServer in cui hai configurato il tuo handler è gestita solo se utilizzi IIS 7.0 (o successivo) oppure IIS Express.
Se, invece, usi l'ASP.NET Development Server, oppure pubblichi il sito su un IIS 6.0 (quindi su Windows Server 2003), per configurare l'handler devi inserire l'apposita sezione httpHandlers nella sezione system.web:
<httpHandlers> <add verb="*" path="*.prova" type="HandlErr, App_Code"/> </httpHandlers>
Marco Minerva [MCPD]
Blog: http://blogs.ugidotnet.org/marcom
Twitter: @marcominerva -
Sunday, May 06, 2012 11:28 AM
Grazie mille Marco, ora funziona!! :)
Quindi nell'ambiente di sviluppo devo fare:
<system.web> <compilation debug="true" targetFramework="4.0"/> <httpHandlers> <add verb="*" path="*.prova" type="HandlErr, App_Code"/> </httpHandlers> </system.web>
Mentre in produzione (dove ho IIS 7.5) dovrò inserire la stessa direttiva:
<add verb="*" path="*.prova" type="HandlErr, App_Code"/>
ma all'interno dei tag <handlers></handlers> della sezione <system.webServer> giusto? Oppure la direttiva è diversa?
Grazie ancora! :)
- Edited by PowerLower Sunday, May 06, 2012 11:30 AM
-
Sunday, May 06, 2012 11:33 AMAnswerer
Sì, su IIS 7.5 devi inserire la sezione handlers in system.webServer esattamente come hai mostrato nel tuo primo post.
Marco Minerva [MCPD]
Blog: http://blogs.ugidotnet.org/marcom
Twitter: @marcominerva -
Sunday, May 06, 2012 11:48 AM
Perfetto, nel ringraziarti ancora approfitto per un'ultima domanda, in realtà ciò che vorrei intercettare sono tutti i file che terminano con un punto (esempio: http://miosito.it/file. oppure http://miosito.it/cartella/file.. oppure http://miosito.it/cartella/cartella1/file... ) ma se provo a fare:
<add verb="*" path="/*." type="HandlErr, App_Code"/>
non funziona...
Forse non si indica con /*. ma c'è una sintassi diversa?
Grazie :)
-
Sunday, May 06, 2012 11:51 AMAnswererNon credo che questo sia possibile...
Marco Minerva [MCPD]
Blog: http://blogs.ugidotnet.org/marcom
Twitter: @marcominerva -
Sunday, May 06, 2012 11:54 AMAcc... Quindi non c'è nessun modo di intercettare richieste di questo tipo? Anche usando altri metodi al posto di un httphandler...
-
Sunday, May 06, 2012 11:55 AMAnswererDirei di no... D'altra parte, a cosa ti serve?
Marco Minerva [MCPD]
Blog: http://blogs.ugidotnet.org/marcom
Twitter: @marcominerva -
Sunday, May 06, 2012 12:02 PM
Ti spiego, ho un sito web e all'interno del webmastertool visualizzo una serie di errori 404 di questa forma: miosito.it/pagina.. miosito.it/paginadue.. ecc... questo perchè Google indicizza questi link (non so perchè nè in che modo), per cui vorrei che, a fronte di queste richieste, non venga ritornato il classico errore 404 di iis ma una pagina di errore personalizzata.
P.S. Ho fatto dei test in molti siti web e riescono a gestire questi tipi di richieste (compare una pagina personalizzata), a questo punto però non so come facciano...
-
Sunday, May 06, 2012 12:07 PMAnswererAspetta, ma se il tuo problema è mostrare una pagina di errore personalizzata, nel caso di pagina non trovata (404), non devi usare un HttpHandler, ma configurare la sezione customErrors nel file web.config: http://msdn.microsoft.com/it-it/library/h0hfz6fc.aspx.
Marco Minerva [MCPD]
Blog: http://blogs.ugidotnet.org/marcom
Twitter: @marcominerva -
Sunday, May 06, 2012 12:12 PM
Ho già configurato le pagine di errore in questo modo:
<remove statusCode="404" subStatusCode="-1" /> <error statusCode="404" prefixLanguageFilePath="" path="/ErrorPage.aspx" responseMode="ExecuteURL" /> .... <customErrors defaultRedirect="/ErrorPage.aspx" mode="RemoteOnly"> <error statusCode="404" redirect="/ErrorPage.aspx" /> </customErrors>
e riesco ad intercettare tutti gli errori 404 tranne però quelli in cui la richiesta termina con un punto e non riesco a capire perchè, ecco il motivo per cui avevo pensato di usare un httphandler :)
- Edited by PowerLower Sunday, May 06, 2012 12:13 PM
-
Sunday, May 06, 2012 12:18 PMAnswererCredo che potresti usare un HttpModule in cui, per ogni richiesta, controlli se l'URL termina con il punto: in tal caso, effettui il redirect verso la pagina di errore.
Marco Minerva [MCPD]
Blog: http://blogs.ugidotnet.org/marcom
Twitter: @marcominerva -
Sunday, May 06, 2012 12:49 PMCi provo subito, grazie! :)
-
Sunday, May 06, 2012 1:04 PMNiente, non c'è da fare. Anche con un HttpModule, ogni volta che richiedo un url che termina con un punto, mi compare immediatamente l'errore 404 di iss non permettendomi di fare nulla, mi sa che ci rinuncio :(
-
Sunday, May 06, 2012 1:06 PMAnswererHai verificato che, inserendo un URL corretto, il modulo viene invocato, mentre con un indirizzo che finisce con il punto, ciò non accade?
Marco Minerva [MCPD]
Blog: http://blogs.ugidotnet.org/marcom
Twitter: @marcominerva -
Sunday, May 06, 2012 1:21 PM
Sì, il modulo viene sempre invocato, tranne quando l'url termina con un punto...
Mi viene da pensare che possa essere IIS che tratta in modo particolare gli url che terminano con un punto.
- Edited by PowerLower Sunday, May 06, 2012 1:21 PM
- Edited by PowerLower Sunday, May 06, 2012 1:33 PM
-
Sunday, May 06, 2012 1:33 PMAnswerer
Resta da provare con l'URL Rewriting, ma non saprei in che modo... Onestamente, è la prima volta che sento qualcuno che vuole intercettare le richieste che terminano con il punto :-)
Marco Minerva [MCPD]
Blog: http://blogs.ugidotnet.org/marcom
Twitter: @marcominerva -
Sunday, May 06, 2012 3:24 PM
Ho trovato questa discussione, forse fa al caso mio? :)
- Edited by PowerLower Sunday, May 06, 2012 3:25 PM
-
Sunday, May 06, 2012 3:43 PMAnswerer
La discussione che hai segnalato parla di un problema lato client, ovvero quando si effettua una richiesta verso un URL che termina con il punto (utilizzando HttpWebRequest).
Al contrario, a te invece serve gestire le richieste ricevute dal server (e quindi non richieste che fai tu, bensì richieste che provengono dall'esterno). Direi quindi che non è ciò che ti serve.
Tuttavia, facendo qualche altra ricerca su Internet, sembra che questo problema sia un bug noto di .NET, che però non è mai stato risolto. Non credo quindi che ci sia molto da fare.
Ad ogni modo, se devo essere sincero non ho capito perché hai bisogno di gestire le richieste che terminano il punto... Come mai ricevi richieste di questo tipo?
Marco Minerva [MCPD]
Blog: http://blogs.ugidotnet.org/marcom
Twitter: @marcominerva -
Sunday, May 06, 2012 4:16 PMSembra che siano molti siti a ricevere richieste di questo tipo, forse un bug di Google (tanto per restare in tema di bug) che indicizza come fossero dei link le frasi che spesso nei siti vengono abbreviate coi puntini, qui per esempio un altro utente che segnala lo stesso problema.
- Edited by PowerLower Sunday, May 06, 2012 4:17 PM
-
Sunday, May 06, 2012 4:22 PMAnswerer
Mi sembra molto difficile che Google possa indicizzare le frasi che terminano con i puntini... Comunque, se hai questo dubbio nei confronti del modo in cui Google indicizza i contenuti del tuo sito, ti consiglio di mandare una richiesta di supporto a Google stesso, così da fugare ogni dubbio.
Marco Minerva [MCPD]
Blog: http://blogs.ugidotnet.org/marcom
Twitter: @marcominerva -
Monday, May 21, 2012 11:28 PM
Rispolvero questo post poichè ho trovato una interessante impostazione del web.config dal simpatico nome che potrebbe essere utile alla causa:
<httpRuntime relaxedUrlToFileSystemMapping="true" />
ora infatti non ottengo più l'errore di default di IIS alla richiesta di url che terminano con un punto, anche se non riesco ancora ad intercettarli...
- Edited by PowerLower Monday, May 21, 2012 11:30 PM
- Edited by PowerLower Monday, May 21, 2012 11:30 PM

