Câu trả lời:
Bạn có thể 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 đề xuất của brillyfresh trong các bình luận.
substring
phương pháp sẽ cho lỗi nếu không có chuỗi truy vấn. Sử dụng string path = url.Substring(0, url.IndexOf("?") > 0? url.IndexOf("?") : url.Length);
thay thế.
Đâ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);
Mượn từ đây: Cắt ngắn chuỗi truy vấn & trả lại URL sạch C # ASP.net
return Request.Url.GetLeftPart(UriPartial.Path);
uri.GetComponent(
là một phương pháp tuyệt vời khác để lấy các bộ phận của Uri. Tôi đã không biết về hai người này cho đến bây giờ!
Request.RawUrl.Split(new[] {'?'})[0];
RawUrl
sẽ nhận được URL trước khi viết lại URL, vì vậy có lẽ nên sử dụng AbsoluteUri
? Request.Url.AbsoluteUri.Split('?')[0]
Câu trả lời tốt cũng được tìm thấy ở đây nguồn câu trả lời
Request.Url.GetLeftPart(UriPartial.Path)
Cách của tôi
new UriBuilder(url) { Query = string.Empty }.ToString()
hoặc là
new UriBuilder(url) { Query = string.Empty }.Uri
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ì hiện tại tôi không sử dụng lõi 1.1)
Bạn có thể sử dụng Request.Url.AbsolutePath
để lấy tên trang và Request.Url.Authority
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 để cung cấp cho bạn chính xác những gì bạn muốn, nhưng bạn có thể tự kết hợp chúng.
Biến ()
Tôi chỉ muốn thêm biến thể này để tham khảo. Các Url thường là các chuỗi và vì vậy sử dụng Split()
phương thức này đơn giản hơn Uri.GetLeftPart()
. Và Split()
cũng có thể được thực hiện để làm việc với các giá trị tương đối, trống và null trong khi Uri đưa ra một ngoại lệ. Ngoài ra, các Url cũng có thể chứa một hàm băm như/report.pdf#page=10
(mở pdf ở một trang cụ thể).
Phương pháp sau đây liên quan đến tất cả các loại Url này:
var path = (url ?? "").Split('?', '#')[0];
Kết quả ví dụ:
http: //domain/page.html#page=2 ---> http: //domain/page.html
page.html ---> page.html
Đây là một phương pháp mở rộng sử dụng câu trả lời của @ Kolman. Việc sử dụng Path () dễ dàng hơn một chút 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 họ thêm thuộc tính mở rộng vào C #.
Sử dụng:
Uri uri = new Uri("http://www.somewhere.com?param1=foo¶m2=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);
}
}
}
string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
string path = url.split('?')[0];
Request.RawUrl.Split('?')[0]
Chỉ cho tên url thôi !!
Tôi đã tạo một tiện ích mở rộng đơn giản, vì một vài câu trả lời khác đã đưa ra các ngoại lệ không có giá trị nếu không QueryString
bắt đầu bằng:
public static string TrimQueryString(this string source)
{
if (string.IsNullOrEmpty(source))
return source;
var hasQueryString = source.IndexOf('?') != -1;
if (!hasQueryString)
return source;
var result = source.Substring(0, source.IndexOf('?'));
return result;
}
Sử dụng:
var url = Request.Url?.AbsoluteUri.TrimQueryString()
System.Uri.GetComponents
, chỉ cần các thành phần bạn muốn.
Uri uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
uri.GetComponents(UriComponents.SchemeAndServer | UriComponents.Path, UriFormat.UriEscaped);
Đầu ra:
http://www.example.com/mypage.aspx
var canonicallink = Request.Url.Scheme + "://" + Request.Url.Authority + Request.Url.AbsolutePath.ToString();
Thử cái này:
urlString=Request.RawUrl.ToString.Substring(0, Request.RawUrl.ToString.IndexOf("?"))
từ đây: http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye bạn sẽ nhận được điều này: mypage.aspx
this.Request.RawUrl.Substring(0, this.Request.RawUrl.IndexOf('?'))