2011-12-14 23 views
5

Actualmente tenemos una solución que atrapa el nombre de archivo de la URL que utiliza esteConseguir Nombre de URL en C#

currentFile = Path.GetFileNameWithoutExtension(url); 

Hemos encontrado que si hay cadenas de consulta adjuntos que incluyen caracteres tales como cotizaciones se devuelve un error de caracteres ilegales en el camino.

Por ejemplo, si la URL es

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

entonces no va a obtener el nombre del archivo. ¿Hay una forma mejor y más limpia de obtener "mi página"?

+0

¿No puedes eliminar la cadena de consulta de la URL antes de llamar GetFileNameWithoutExtension? –

+0

marque este: http://stackoverflow.com/a/6015377/559144 y vólelo si resuelve su problema ;-) –

+0

¿Ha probado Server.UrlEncode (url); antes de obtener el nombre del archivo? –

Respuesta

15

uso esto: Uri.AbsolutePath

Request.Url.AbsolutePath 
+1

+1 Por no reinventar la rueda. –

+15

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

3

Me gustaría encontrar el ? y si existe, pelar el resto de la cadena, y luego usarlo para GetFileNameWithoutExtension.

Por ejemplo:

 string url; 
     int index; 

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

+1 mejor que yo. – Etch

+0

esto es mucho más complicado y detallado de lo que el framework ya ofrece: Request.Url.AbsolutePath –

+1

@DavidePiras: ¿Por qué asumes que la URL que se está procesando es la url de la solicitud? El OP no mencionó esto en la pregunta inicial. La solución que proporcioné fue una respuesta directa a su código publicado que solo hacía referencia a una URL. Esta url podría ser de un archivo de registro, podría ser de una cadena de referencia, o de una página HTML analizada con referencias incrustadas. –

0

uso HttpContext.Current.Request.PhysicalPath en lugar de la dirección URL completa como parámetro en el método Path.GetFileNameWithoutExtension.

Espero que esto ayude,

Cuestiones relacionadas