2011-12-14 15 views
5

Attualmente abbiamo una soluzione che prende il nome del file dall'URL utilizzando questoOttenere Nome file da URL in C#

currentFile = Path.GetFileNameWithoutExtension(url); 

Abbiamo scoperto che se ci sono stringhe di query allegate che includono caratteri come le virgolette restituisce con un errore di personaggi illegali nel percorso.

Per esempio, se l'URL è

http:\\myurl.com\mypage.aspx?utm_content=This+Is+"Broken" 

allora non ottenere il nome del file. C'è un modo migliore e più pulito per ottenere "mypage"?

+0

Non puoi semplicemente rimuovere la stringa di query dall'URL prima di chiamare GetFileNameWithoutExtension? –

+0

controlla questo: http://stackoverflow.com/a/6015377/559144 e votalo se risolve il problema ;-) –

+0

hai provato Server.UrlEncode (url); prima di ottenere il nome del file? –

risposta

15

uso questo: Uri.AbsolutePath

Request.Url.AbsolutePath 
+1

+1 Per non reinventare la ruota. –

+15

'string filename = Path.GetFileName (nuovo Uri (myUrlString) .AbsolutePath);' – jocull

3

Vorrei trovare lo ? e se esiste, eliminare il resto della stringa, quindi utilizzarlo per GetFileNameWithoutExtension.

Ad esempio:

 string url; 
     int index; 

     index = url.IndexOf("?"); 
     if (index != -1) 
     { 
      url = url.Substring(0, index); 
     } 
     currentFile = Path.GetFileNameWithoutExtension(url); 
+0

+1 meglio di me. – Etch

+0

questo è il modo più complicato e dettagliato di quello che offre già il framework: Request.Url.AbsolutePath –

+1

@DavidePiras: perché presumi che l'URL in elaborazione sia l'URL della richiesta? Il PO non ha fatto menzione di questo nella domanda iniziale. La soluzione che ho fornito era una risposta diretta al loro codice pubblicato che faceva riferimento solo a un URL. Questo URL potrebbe provenire da un file di log, potrebbe essere da una stringa di riferimento o da una pagina HTML analizzata con riferimenti incorporati. –

0

uso HttpContext.Current.Request.PhysicalPath anziché l'URL completo come parametro nel metodo Path.GetFileNameWithoutExtension.

Spero che questo aiuti,