UrlEncode e IIS7

Quando si costruiscono url dinamici in base a delle variabili di applicazione, è bene utilizzare l’apposito metodo UrlEncode della classe statica HttpUtility, che ha il compito di effettuare il replace di tutti i caratteri non compatibili con gli url.

Per esempio l’url seguente http://imperugo.tostring.it/Categories/Archive/Windows Communication Foundation dovrebbe diventare http://imperugo.tostring.it/Categories/Archive/Windows+Communication+Foundation
Di fatto HttpUtility.UrlEncode("Windows Communication Foundation") sostituisce lo spazio con il carattere “+”.

Quando la propria applicazione risiede su un web server come IIS7.x (Windows Vista, Windows Server 2008, Windows 7, Windows Server 3008 R2) si possono riscontrare dei problemi con questo tipo di url in quanto per default sono bloccati tutti gli url contenenti più di un carattere di escape - nel nostro esempio il “+” - sollevando un’eccezione come la seguente:

HTTP Error 404.11 - Not Found
The request filtering module is configured to deny a request that contains a double escape sequence.

Per disabilitare questa protezione e poter sfruttare l’urlEncode è necessario agire sulla configurazione di IIS nell’apposito file di configurazione (%windir%\System32\inetsrv\config\applicationHost.config) o nell’apposita sezione del web.config dell’applicazione come mostrato di seguito

<system.webServer>
  <security>
      <requestFiltering allowDoubleEscaping="true" />
  </security>
  <!-- ..... --> 
</system.webServer>

In questo modo non si avranno eccezioni per tutti gli url contenenti caratteri di escape.


Comments