2011-01-07 2 views
147

У меня есть URL-адрес, как это:Получить URL без строк запроса

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

Я хочу, чтобы получить http://www.example.com/mypage.aspx от него.

Можете ли вы рассказать мне, как я могу его получить?

ответ

112

Вы можете использовать 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); 

Или вы можете использовать substring

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

EDIT: Изменение первого решения, чтобы отразить предложение brillyfresh в в комментариях.

+6

url.AbsolutePath возвращает только часть пути URL (/mypage.aspx); preend url.Scheme (http) + Uri.SchemeDelimiter (: //) + url.Authority (www.somesite.com) для полного URL-адреса, который вам нужен – Ryan

+16

Метод Uri.GetLeftPart проще, как упоминалось http://stackoverflow.com/questions/1188096/truncating-query-string-return-clean-url-c-sharp-asp-net/1188180 # 1188180 –

10

Вы можете использовать Request.Url.AbsolutePath, чтобы получить имя страницы, и Request.Url.Authority для имени хоста и порта. Я не верю, что есть встроенная собственность, чтобы дать вам именно то, что вы хотите, но вы можете объединить их сами.

+1

Это дает мне /mypage.aspx, не то, что я хотел. –

307

Вот простое решение:

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

Заимствованные здесь: Truncating Query String & Returning Clean URL C# ASP.net

+23

Это должен быть принятый ответ. –

+9

Версия одной строки: 'return Request.Url.GetLeftPart (UriPartial.Path);' – jp2code

+0

'uri.GetComponent (' это еще один потрясающий метод для получения частей Uri. Я не знал об этих двух до сих пор! – AaronLS

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

Просто и работает с URL-адресами без?? – rkawano

+1

Мне это нравится только для того, чтобы вы могли использовать его без полного uri. – KingOfHypocrites

33

Это мое решение:

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

Это даст ошибку, если нет строки запроса –

11

Мой путь:

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

или

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

Это то, что я использую для проекта NET Core 1.0, потому что у него нет метод 'Uri.GetLeftPart'. Последняя версия .NET Core (1.1) должна иметь этот метод (не могу подтвердить, потому что сейчас я не на чистом ядре 1.1) – psulek

+0

Мне это нравится, потому что создание URI - это именно то, что для UriBuilder. Все остальные ответы (хорошие) хаки. –

3

Вот метод расширения с помощью @ ответ Колман в. Немного легче запомнить использование Path(), чем GetLeftPart. Возможно, вам захочется переименовать Path в GetPath, по крайней мере, до тех пор, пока они не добавят свойства расширения в C#.

Использование:

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

Класс:

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]

Просто только имя URL-адрес !!

-1

this.Request.RawUrl.Substring (0, this.Request.RawUrl.IndexOf («?«))

0

Solution для Silverlight:

string path = HtmlPage.Document.DocumentUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped); 
Смежные вопросы