2011-01-07 55 views
147

tengo una URL como esta:obtener la URL sin querystring

http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye

quiero conseguir http://www.example.com/mypage.aspx de ella.

¿Puede decirme cómo puedo obtenerlo?

Respuesta

112

Puede utilizar System.Uri

Uri url = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye"); 
string path = String.Format("{0}{1}{2}{3}", url.Scheme, 
    Uri.SchemeDelimiter, url.Authority, url.AbsolutePath); 

O puede utilizar substring

string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye"; 
string path = url.Substring(0, url.IndexOf("?")); 

EDIT: La modificación de la primera solución para reflejar la sugerencia de brillyfresh en los comentarios.

+6

url.AbsolutePath solo devuelve la parte de ruta de la URL (/mypage.aspx); prepend url.Scheme (http) + Uri.SchemeDelimiter (: //) + url.Authority (www.somesite.com) para la URL completa que quería – Ryan

+16

método es más simple Uri.GetLeftPart como se mencionó http://stackoverflow.com/questions/1188096/truncating-query-string-returning-clean-url-c-sharp-asp-net/1188180 # 1188180 –

10

Puede usar Request.Url.AbsolutePath para obtener el nombre de la página, y Request.Url.Authority para el nombre de host y el puerto. No creo que haya una propiedad incorporada para darle exactamente lo que desea, pero puede combinarlas usted mismo.

+1

Me está dando /mypage.aspx, lo que no quería. –

307

Aquí es una solución más simple:

var uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye"); 
string path = uri.GetLeftPart(UriPartial.Path); 

tomado de aquí: Truncating Query String & Returning Clean URL C# ASP.net

+23

Esta debería ser la respuesta aceptada. –

+9

Versión de una línea: 'return Request.Url.GetLeftPart (UriPartial.Path);' – jp2code

+0

'uri.GetComponent (' es otro método increíble para obtener partes de un Uri. ¡No sabía de estos dos hasta ahora! – AaronLS

28
Request.RawUrl.Split(new[] {'?'})[0]; 
+0

Simply y funciona con urls sin "?" – rkawano

+1

Me gusta solo por el hecho de que puede usarlo sin un uri completo. – KingOfHypocrites

33

Ésta es mi solución:

Request.Url.AbsoluteUri.Replace(Request.Url.Query, String.Empty); 
+4

Esto dará error si no hay cadena de consulta –

11

Mi manera:

new UriBuilder(url) { Query = string.Empty }.ToString() 

o

new UriBuilder(url) { Query = string.Empty }.Uri 
+0

Esto es lo que uso para el proyecto NET Core 1.0 porque no tiene método 'Uri.GetLeftPart'. la última versión de NET Core (1.1) que debe tener (confirmar no puede porque no estoy en el núcleo de red 1.1 por ahora) método – psulek

+0

me gusta este, porque la construcción de URI es exactamente lo que el UriBuilder es para. Todas las demás respuestas son (buenas) hacks. –

3

Aquí es un método de extensión usando @ respuesta de Kolman. Es marginalmente más fácil recordar usar Path() que GetLeftPart. Es posible que desee cambiar el nombre de la ruta de acceso a GetPath, al menos hasta que agreguen propiedades de extensión a C#.

Uso:

Uri uri = new Uri("http://www.somewhere.com?param1=foo&param2=bar"); 
string path = uri.Path(); 

La clase:

using System; 

namespace YourProject.Extensions 
{ 
    public static class UriExtensions 
    { 
     public static string Path(this Uri uri) 
     { 
      if (uri == null) 
      { 
       throw new ArgumentNullException("uri"); 
      } 
      return uri.GetLeftPart(UriPartial.Path); 
     } 
    } 
} 
1

Request.RawUrl.Split ('?') [0]

Sólo por nombre url solamente !!

-1

this.Request.RawUrl.Substring (0, this.Request.RawUrl.IndexOf (¿?'))

25

buena respuesta también encontrar aquí source of answer

Request.Url.GetLeftPart(UriPartial.Path) 
0

solución para Silverlight:

string path = HtmlPage.Document.DocumentUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);