Na ruim 5 jaar in PHP te hebben gewerkt, heb ik een nieuwe uitdaging aangenomen en werk sinds kort bij een nieuwe werkgever in ASP. Ik ben dus nog maar een beginner op het ASP-front.
Vanuit een ASP-pagina sla ik een cookie op waarvan de naam een bestandsnaam is. Bijvoorbeeld "Test:voorbeeld_download.zip". ASP voert automatisch een URLEncode uit op cookies, waardoor het cookie uiteindelijk wordt opgeslagen als "Test%3Avoorbeeld%5Fdownload%2Ezip".
Vanuit een ASPX (ASP.Net) pagina dien ik voor een gegeven bestandsnaam te controleren of hiervoor een cookie bestaat. Hier loopt het echter mis.
Als ik in ASP.Net de bestandsnaam "Test:voorbeeld_download.zip" door Server.URLEncode heen trek, komt daar namelijk een andere uitvoer uit; "Test%3avoorbeeld_download.zip"
Waar ASP alle niet alfanumerieke karakters heeft vervangen met een entiteit, doet ASP.Net dat niet. Die vervangt alleen de dubbele punt.
Voorbeeld code om het probleem te simuleren;
VBscript in ASP
geeft;
VB.Net in ASP.Net
geeft
Welke methode kan ik gebruiken om in beide omgevingen met dezelfde waardes te werken? Als ik de waarde welke uit de ASP Encode rolt in .NET door de Decode trek, komt daar wel gewoon de juiste beginwaarde weer uit. Maar hoe krijg ik de URLEncode in .Net zover dat deze op dezelfde wijze encodeert als in ASP (of andersom) ?
Ik zou in .Net door alle cookies kunnen loopen, de bestandsnaam door Server.URLDecode (welke wel de juiste bestandsnaam teruggeeft) kunnen trekken, en die vergelijken met de gegeven bestandsnaam, maar dat vind ik geen nette oplossing.
Vanuit een ASP-pagina sla ik een cookie op waarvan de naam een bestandsnaam is. Bijvoorbeeld "Test:voorbeeld_download.zip". ASP voert automatisch een URLEncode uit op cookies, waardoor het cookie uiteindelijk wordt opgeslagen als "Test%3Avoorbeeld%5Fdownload%2Ezip".
Vanuit een ASPX (ASP.Net) pagina dien ik voor een gegeven bestandsnaam te controleren of hiervoor een cookie bestaat. Hier loopt het echter mis.
Als ik in ASP.Net de bestandsnaam "Test:voorbeeld_download.zip" door Server.URLEncode heen trek, komt daar namelijk een andere uitvoer uit; "Test%3avoorbeeld_download.zip"
Waar ASP alle niet alfanumerieke karakters heeft vervangen met een entiteit, doet ASP.Net dat niet. Die vervangt alleen de dubbele punt.
Voorbeeld code om het probleem te simuleren;
VBscript in ASP
VBScript:
1
2
3
4
5
6
7
| <% Option Explicit Dim filename filename = "voorbeeld_download.zip" Response.Write("Orgineel bestandsnaam: <br />• <b>" & filename & "</b><br />") Response.Write("Server.URLEncode: <br />• <b>" & Server.URLEncode(filename) & "</b><br />") %> |
geeft;
Orgineel bestandsnaam: • Test:voorbeeld_download.zip Server.URLEncode: • Test%3Avoorbeeld%5Fdownload%2Ezip
VB.Net in ASP.Net
Visual Basic .NET:
1
2
3
4
5
6
7
| Dim App as System.Web.HttpApplication app = Me.Context.ApplicationInstance Dim filename filename = "Test:voorbeeld_download.zip" app.Response.Write("Orgineel bestandsnaam: <br />• <b>" & filename & "</b><br />") app.Response.Write("Server.URLEncode: <br />• <b>" & Server.URLEncode(filename) & "</b><br />") |
geeft
Orgineel bestandsnaam: • Test:voorbeeld_download.zip Server.URLEncode: • Test%3avoorbeeld_download.zip
Welke methode kan ik gebruiken om in beide omgevingen met dezelfde waardes te werken? Als ik de waarde welke uit de ASP Encode rolt in .NET door de Decode trek, komt daar wel gewoon de juiste beginwaarde weer uit. Maar hoe krijg ik de URLEncode in .Net zover dat deze op dezelfde wijze encodeert als in ASP (of andersom) ?
Ik zou in .Net door alle cookies kunnen loopen, de bestandsnaam door Server.URLDecode (welke wel de juiste bestandsnaam teruggeeft) kunnen trekken, en die vergelijken met de gegeven bestandsnaam, maar dat vind ik geen nette oplossing.