2011-01-07 37 views
147

Tôi có một URL như sau:Nhận url mà không chuỗi truy vấn

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

Tôi muốn nhận http://www.example.com/mypage.aspx từ nó.

Bạn có thể cho tôi biết cách tôi có thể nhận được không?

Trả lời

112

Bạn có thể sử dụng 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); 

Hoặc bạn có thể sử dụng substring

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

EDIT: Sửa đổi giải pháp đầu tiên để phản ánh đề nghị brillyfresh của trong các ý kiến.

+6

url.AbsolutePath chỉ trả về phần đường dẫn của URL (/mypage.aspx); url thêm vào trước.Scheme (http) + Uri.SchemeDelimiter (: //) + url.Authority (www.somesite.com) cho URL đầy đủ mà bạn muốn – Ryan

+16

Phương thức Uri.GetLeftPart đơn giản hơn như đã đề cập http://stackoverflow.com/câu hỏi/1188096/cắt ngắn-truy vấn-chuỗi-quay-sạch-url-c-sắc nét-asp-net/1188180 # 1188180 –

10

Bạn có thể sử dụng Request.Url.AbsolutePath để lấy tên trang và Request.Url.Authority cho tên máy chủ và cổng. Tôi không tin rằng có một tài sản được xây dựng trong để cung cấp cho bạn chính xác những gì bạn muốn, nhưng bạn có thể kết hợp chúng mình.

+1

Nó được đem lại cho tôi /mypage.aspx, không phải những gì tôi muốn. –

307

Dưới đây là một giải pháp đơn giản hơn:

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

vay từ đây: Truncating Query String & Returning Clean URL C# ASP.net

+23

Đây phải là câu trả lời được chấp nhận. –

+9

Một phiên bản dòng: 'return Request.Url.GetLeftPart (UriPartial.Path);' – jp2code

+0

'uri.GetComponent (' là một phương pháp tuyệt vời khác để nhận các phần của Uri. Tôi không biết về hai phần này cho đến bây giờ! – AaronLS

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

Đơn giản và làm việc với các url không có "?" – rkawano

+1

Tôi thích điều này chỉ vì thực tế bạn có thể sử dụng nó mà không cần đầy đủ uri – KingOfHypocrites

33

Đây là giải pháp của tôi:

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

Điều này sẽ gây ra lỗi nếu không có chuỗi truy vấn –

11

cách của tôi:

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

hoặc

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

Đây là những gì tôi sử dụng cho dự án NET Core 1.0 vì nó không phương thức 'Uri.GetLeftPart' Phiên bản mới nhất của NET Core (1.1) nên có phương thức đó (không thể xác nhận vì tôi không ở trên lõi mạng 1.1 hiện tại) – psulek

+0

Tôi thích cái này vì xây dựng URI chính xác là cái mà UriBuilder làm. Tất cả các câu trả lời khác là (tốt) hack. –

3

Dưới đây là một phương pháp khuyến nông sử dụng @ câu trả lời Kolman của. Nó dễ nhớ hơn khi sử dụng Path() so với GetLeftPart. Bạn có thể muốn đổi tên Đường dẫn thành GetPath, ít nhất là cho đến khi chúng thêm thuộc tính mở rộng vào C#.

Cách sử dụng:

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

Lớp:

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]

Chỉ cần cho chỉ tên url !!

-1

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

25

Tốt câu trả lời cũng tìm thấy ở đây source of answer

Request.Url.GetLeftPart(UriPartial.Path) 
0

Giải pháp cho Silverlight:

string path = HtmlPage.Document.DocumentUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped); 
Các vấn đề liên quan