HttpHandler non viene eseguito

질문 HttpHandler non viene eseguito

  • 2012년 5월 6일 일요일 오전 9:49
     
      코드 있음

    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 :)







    • 편집됨 PowerLower 2012년 5월 6일 일요일 오전 9:51
    •  

모든 응답

  • 2012년 5월 6일 일요일 오전 10:39
    답변자
     
      코드 있음

    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

  • 2012년 5월 6일 일요일 오전 11:28
     
      코드 있음

    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! :)



    • 편집됨 PowerLower 2012년 5월 6일 일요일 오전 11:30
    •  
  • 2012년 5월 6일 일요일 오전 11:33
    답변자
     
     

    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

  • 2012년 5월 6일 일요일 오전 11:48
     
      코드 있음

    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 :)


  • 2012년 5월 6일 일요일 오전 11:51
    답변자
     
     
    Non credo che questo sia possibile...

    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

  • 2012년 5월 6일 일요일 오전 11:54
     
     
    Acc... Quindi non c'è nessun modo di intercettare richieste di questo tipo? Anche usando altri metodi al posto di un httphandler...
  • 2012년 5월 6일 일요일 오전 11:55
    답변자
     
     
    Direi di no... D'altra parte, a cosa ti serve?

    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

  • 2012년 5월 6일 일요일 오후 12:02
     
     

    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...

  • 2012년 5월 6일 일요일 오후 12:07
    답변자
     
     
    Aspetta, 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

  • 2012년 5월 6일 일요일 오후 12:12
     
      코드 있음

    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 :)


    • 편집됨 PowerLower 2012년 5월 6일 일요일 오후 12:13
    •  
  • 2012년 5월 6일 일요일 오후 12:18
    답변자
     
     
    Credo 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

  • 2012년 5월 6일 일요일 오후 12:49
     
     
    Ci provo subito, grazie! :)
  • 2012년 5월 6일 일요일 오후 1:04
     
     
    Niente, 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 :(
  • 2012년 5월 6일 일요일 오후 1:06
    답변자
     
     
    Hai 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

  • 2012년 5월 6일 일요일 오후 1:21
     
     

    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.

    • 편집됨 PowerLower 2012년 5월 6일 일요일 오후 1:33
    •  
  • 2012년 5월 6일 일요일 오후 1:33
    답변자
     
     

    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

  • 2012년 5월 6일 일요일 오후 3:24
     
     
    • 편집됨 PowerLower 2012년 5월 6일 일요일 오후 3:25
    •  
  • 2012년 5월 6일 일요일 오후 3:43
    답변자
     
     

    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

  • 2012년 5월 6일 일요일 오후 4:16
     
     
    Sembra 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.
    • 편집됨 PowerLower 2012년 5월 6일 일요일 오후 4:17
    •  
  • 2012년 5월 6일 일요일 오후 4:22
    답변자
     
     

    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

  • 2012년 5월 21일 월요일 오후 11:28
     
      코드 있음

    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...



    • 편집됨 PowerLower 2012년 5월 21일 월요일 오후 11:30
    •