[ASP & ASP.Net] Verschil Server.URLEncode

Pagina: 1
Acties:

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 14-04 16:14
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
VBScript:
1
2
3
4
5
6
7
<%
Option Explicit
Dim filename
filename = "voorbeeld_download.zip"
Response.Write("Orgineel bestandsnaam: <br />&bull;&nbsp;&nbsp;<b>" & filename & "</b><br />")
Response.Write("Server.URLEncode: <br />&bull;&nbsp;&nbsp;<b>" & Server.URLEncode(filename) & "</b><br />")
%>

geeft;
Orgineel bestandsnaam: 
&#8226;  Test:voorbeeld_download.zip
Server.URLEncode: 
&#8226;  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 />&bull;&nbsp;&nbsp;<b>" & filename & "</b><br />")
app.Response.Write("Server.URLEncode: <br />&bull;&nbsp;&nbsp;<b>" & Server.URLEncode(filename) & "</b><br />")

geeft
Orgineel bestandsnaam: 
&#8226;  Test:voorbeeld_download.zip
Server.URLEncode: 
&#8226;  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.

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 05-04 18:13
http://lab.msdn.microsoft...spx?query=URL+Encode+.NET

[ Voor 79% gewijzigd door Mastermind op 16-01-2006 19:47 ]


  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Allereerst vind ik het vaag dat ASP een URLEncode over je cookie waarden heengooit, maar ik heb het net gechecked en het gebeurt inderdaad. ASP.NET doet helemaal geen URLEncode over je cookies.

Toen ben ik even gaan googlen en vond ik het volgende document
PRB: ASP.NET Does Not Encode Cookies in UrlEncode Format by Default
http://support.microsoft....aspx?scid=kb;en-us;313282

Lees dat maar eens door zou ik zeggen.

It’s nice to be important but it’s more important to be nice


  • frickY
  • Registratie: Juli 2001
  • Laatst online: 14-04 16:14
Dat document had ikj ook al gevonden, maar heb ik in principe niets aan.
In mijn .Net pagina heb ik een bestandsnaam, bijv "Test:voorbeeld_download.zip
" waarmee ik in een simpele If-expressie wil controleren of hier een cookie voor bestaat. Dat kan dus niet. Dat cookie heeft namelijk "[u][Test%3Avoorbeeld%5Fdownload%2Ezip
/u]" terwijl ik in .Net zit met "Test%3avoorbeeld_download.zip"

Ik heb het nu 'opgelost' door door alle cookies te loopen, de naam door Server.URLDecode heen te trekken, en daar mijn if-expressie in. Het werkt, maar netjes vind ik anders.

Ik vind het opzich begrijpelijk dat cookie-namen en waardes autmatisch geencode worden. Ik snap de manier van encoden in ASP echter niet. Een punt of underscore hoeft helemaal niet geencode te worden. ASP.Net doet het wat dat betreft neter, vind ik. Maar ja, daar heb ik weinig aan :)
Had ook al overwogen om niet de bestandsnaam als cookienaam te gebruiken, maar bijvoorbeeld de md5-hash hiervan. Dat vond ik echter ook teveel rompslomp met zich meebrengen; een hash maken in ASP.
* frickY mist php :)

@Mastermind
Het ontgaat me een beetje wat ik aan je gegeven link zou kunnen hebben :?

[ Voor 16% gewijzigd door frickY op 17-01-2006 14:34 ]