Domanda

ASP.NET 3.5, IIS7

Nel mio Application_BeginRequest di Global.asax, ho bisogno di estrarre dal URL della richiesta di un URL del tutto separato che è stato incorporato in esso senza utilizzare query string .

La soluzione mi è venuta era di Hex-codificare l'intero URL di destinazione come se fosse una directory, nel seguente modo:

http://localhost/687474703A...etc...732E6D7033/irrelevantFilename.txt

Questo non riesce per IIS7, il cui ASP.NET implementazione non tollererà un sentiero URL superiore a 260 caratteri .

Il mio codice controlla come l'URL della richiesta viene generato, e come potrebbe incorporare l'URL di destinazione in là, ma non ha alcun controllo su tale valore URL di destinazione (sono URL di terze parti).

Come meglio ho potuto incorporare questa URL di destinazione nella mia richiesta URL?

È stato utile?

Soluzione

Si potrebbe url-encode, o in alternativa, in base 64 codificare. Entrambi sono generalmente più compatta della codifica esadecimale.

Nota: Se l'URL è più lungo di circa 200 caratteri, che 260 caratteri limite sarà un problema non importa quale. E se l'URL è più lungo di 260 caratteri ... beh, si può fare la matematica: -)

Io non capisco perché è nemmeno bisogno di un file separato in seguito, però. Si potrebbe utilizzare un gestore di 404, o semplicemente analizzare destra avanti per ogni richiesta.

A proposito: se si ha la possibilità, siete probabilmente meglio incorporare l'URL utilizzando un cookie, o come argomento POST. Se questo non è un'opzione, è anche possibile considerare l'utilizzo di un servizio di URL-accorciamento come http://bit.ly/ ecc Questi URL sono davvero breve. Tutto dipende da dove gli URL provengono in primo luogo. Se si dispone di controllo sulla generazione di questi URL, perché non solo dare loro ciascuno un breve ID, e memorizzarli in una tabella, e guardare in alto quando si "analizza" l'URL?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top