2009-02-27 59 views
539

Có ai có thể giúp tôi lấy URL của trang đang hoạt động hiện tại của ASP.NET trong C# không?Cách lấy URL của trang hiện tại trong C#

+7

@Gordon Vậy đó là gì? Bạn đã đánh dấu câu hỏi này là trùng lặp ... NHỮNG CÂU HỎI R YOUNG BẠN ĐÃ ĐƯỢC ĐÁNH DẤU NHƯ MỘT TUỔI DU LỊCH, MỘT PHÚT L MINI. Có lẽ chúng tôi cần một yêu cầu tính năng để có được StackOverflow để thêm "không theo dõi" để đánh dấu bản sao, bởi vì tất cả tôi muốn là một câu trả lời và công cụ tìm kiếm đưa tôi ở đây đầu tiên. Tôi sẽ không đưa ra yêu cầu như vậy tuy nhiên, vì sợ rằng nó được đánh dấu trùng lặp. :( –

+2

@MarkAllen không chắc chắn tại sao bạn lại la mắng tôi? Nếu bạn làm theo sự lừa đảo, bạn sẽ kết thúc ở câu hỏi lâu đời nhất (tôi có thể tìm thấy sau đó) hỏi điều này. Trang này cung cấp cho bạn 14 câu trả lời, trang đóng cho một câu trả lời cho bạn 15 câu trả lời và câu trả lời ban đầu cho bạn một câu trả lời khác 11. Nếu tôi không đóng câu hỏi, bạn sẽ chỉ nhận được 14, không phải 40. Lưu ý rằng bạn có ít hơn 10k đại diện để bạn không nhìn thấy những người đã xóa – Gordon

+6

@Gordon Xin lỗi nếu mũ bị xúc phạm bạn.Nó sẽ là tốt đẹp nếu dupes có thể được tiếp xúc trong một trang sáp nhập duy nhất. –

Trả lời

791

Hãy thử điều này:

string url = HttpContext.Current.Request.Url.AbsoluteUri; 
// http://localhost:1302/TESTERS/Default6.aspx 

string path = HttpContext.Current.Request.Url.AbsolutePath; 
// /TESTERS/Default6.aspx 

string host = HttpContext.Current.Request.Url.Host; 
// localhost 
+4

AbsolutePath xuất hiện để trả về "/" trong .NET 3.5 (chưa thử nghiệm các phiên bản khác) cho đường dẫn tương tự như tài khoản người dùng twitter, chẳng hạn như http://twitter.com/#!/user . Bạn có thể sử dụng phương thức Fragment để lấy bất cứ thứ gì sau pound (#). –

+2

Trên thực tế, những điều này không chính xác khi được sử dụng với cơ chế viết lại như UrlRewriter.net vì điều này sẽ cung cấp URL viết lại. Sau đó bạn có thể sử dụng: Request.Url.GetLeftPart (UriPartial.Authority) + Request.RawUrl –

+0

bạn sẽ làm gì nếu 'HttpContext.Current' là null? – drzaus

41

nếu bạn chỉ muốn phần giữa http: // và dấu gạch chéo đầu tiên

string url = Request.Url.Host; 

sẽ trở stackoverflow.com nếu gọi từ trang này

Dưới đây là complete breakdown

+12

Không bao gồm cổng. Cần: 'HttpContext.Current.Request.Url.Port'. – JohnB

+1

@JohnB hoặc đúng hơn là 'HttpContext.Current.Request.Url.Authority', tìm nạp' host: port' bằng một cuộc gọi ... –

7

Tìm kiếm đã đưa tôi đến trang này, nhưng không hoàn toàn là những gì tôi đang tìm kiếm. Đăng bài ở đây trong trường hợp ai đó đang tìm kiếm những gì tôi đã truy cập trang này.

Có hai cách để làm điều đó nếu bạn chỉ có giá trị chuỗi.

.NET cách:

Tương tự như @Canavar, nhưng bạn có thể nhanh chóng một Uri new Object

String URL = "http://localhost:1302/TESTERS/Default6.aspx"; 
System.Uri uri = new System.Uri(URL); 

có nghĩa là bạn có thể sử dụng phương pháp tương tự, ví dụ

string url = uri.AbsoluteUri; 
// http://localhost:1302/TESTERS/Default6.aspx 

string host = uri.host 
// localhost 

cách Regex:

Getting parts of a URL (Regex)

+1

Cũng đáng lưu ý rằng nếu chuỗi không thể được phân tích cú pháp, nó sẽ ném ra một System.FormatException. Tuy nhiên, phương thức System.Uri.TryCreate đã được giới thiệu trong .NET 4. –

87

Chỉ cần chia sẻ vì đây là giải pháp của tôi nhờ vào bài Canavar của.

Nếu bạn có một cái gì đó như thế này:

"http://localhost:1234/Default.aspx?un=asdf&somethingelse=fdsa" 

hay như thế này:

"https://www.something.com/index.html?a=123&b=4567" 

và bạn chỉ muốn một phần mà người dùng sẽ gõ vào thì điều này sẽ làm việc:

String strPathAndQuery = HttpContext.Current.Request.Url.PathAndQuery; 
String strUrl = HttpContext.Current.Request.Url.AbsoluteUri.Replace(strPathAndQuery, "/"); 

kết quả là:

"http://localhost:1234/" 
"https://www.something.com/" 
+1

Chỉ cần nêu rõ ràng: HttpContext nằm trong System.Web, tức là System.Web.HttpContext. msdn: http://msdn.microsoft.com/en-us/library/system.web.httpcontext.aspx – Sindre

+9

Thậm chí đơn giản hơn là: 'Request.Url.GetLeftPart (UriPartial.Authority)' Xem tại đây: https: // msdn .microsoft.com/vi-us/library/system.uri.getleftpart (v = vs.110) .aspx –

5

Tôi đoán đủ của nó trở về đường dẫn tuyệt đối ..

Path.GetFileName(Request.Url.AbsolutePath) 

using System.IO;

+0

Tôi không nghĩ rằng sẽ đáp ứng OP vì nó chỉ cung cấp cho tên trang: ( – clamchoda

12

Nếu bạn muốn nhận được

localhost:2806 

từ

http://localhost:2806/Pages/ 

sau đó sử dụng:

HttpContext.Current.Request.Url.Authority 
372

Bạn có thể vào những thời điểm cần phải nhận được giá trị khác nhau từ URL.

Dưới đây ví dụ cho thấy cách khác nhau để giải nén các phần khác nhau của URL

VÍ DỤ: (URL mẫu)

http://localhost:60527/WebSite1test/Default2.aspx?QueryString1=1&QueryString2=2

Response.Write("<br/> " + HttpContext.Current.Request.Url.Host); 
Response.Write("<br/> " + HttpContext.Current.Request.Url.Authority); 
Response.Write("<br/> " + HttpContext.Current.Request.Url.Port); 
Response.Write("<br/> " + HttpContext.Current.Request.Url.AbsolutePath); 
Response.Write("<br/> " + HttpContext.Current.Request.ApplicationPath); 
Response.Write("<br/> " + HttpContext.Current.Request.Url.AbsoluteUri); 
Response.Write("<br/> " + HttpContext.Current.Request.Url.PathAndQuery); 

OUTPUT

localhost 
localhost:60527 
60527 
/WebSite1test/Default2.aspx 
/WebSite1test 
http://localhost:60527/WebSite1test/Default2.aspx?QueryString1=1&QueryString1=2 
/WebSite1test/Default2.aspx?QueryString1=1&QueryString2=2 

Bạn có thể sao chép dán trên mẫu mã & chạy nó trong asp.net mẫu web ứng dụng với URL khác.

Tôi cũng khuyên bạn nên đọc Định tuyến ASP.Net trong trường hợp bạn có thể sử dụng Định tuyến ASP sau đó bạn không cần phải sử dụng URL truyền thống với chuỗi truy vấn.

http://msdn.microsoft.com/en-us/library/cc668201%28v=vs.100%29.aspx

10

một mẹo cho những người cần path/url trong tập tin global.asax;

Nếu bạn cần phải chạy này trong global.asax> Application_Start và bạn ứng dụng chế độ hồ bơi được tích hợp sau đó bạn sẽ nhận được báo lỗi dưới đây:

Yêu cầu không có sẵn trong ngoại lệ bối cảnh này trong Application_Start.

Trong trường hợp đó bạn cần sử dụng này:

System.Web.HttpRuntime.AppDomainAppVirtualPath

Hope sẽ giúp đỡ người khác ..

16

yêu cầu. rawurl sẽ cung cấp nội dung của trang hiện tại nó cung cấp đường dẫn chính xác mà bạn yêu cầu

sử dụng HttpContext.Current.Request.RawUrl

Các vấn đề liên quan