Làm cách nào để có được url đầy đủ của trang tôi đang truy cập trong C #


163

Tôi cần có thể truy cập URL đầy đủ của trang tôi đang kiểm soát. Có phải chỉ là vấn đề ghép một loạt các biến Yêu cầu lại với nhau? Nếu vậy cái nào? Hoặc có một cách simpiler hơn?


5
Đối với bất kỳ ai trong webfarm cân bằng tải .. hãy coi chừng số cổng xuất hiện khi sử dụng System.Url: stackoverflow.com/questions/7674850/
Lỗi

Câu trả lời:


155

Tôi thường sử dụng Request.Url.ToString()để có được url đầy đủ (bao gồm cả chuỗi truy vấn), không yêu cầu nối.


2
Nếu URL chứa '#' thì tất cả ký tự sau # sẽ không được bao gồm.
Krunal Sisodiya

5
@KrunalSisodiya Tôi không nghĩ rằng hàm băm của URL đã được gửi đến máy chủ, nhưng tôi có thể sai.
ngày

Request.Url.ToString()không bao gồm queryString.
Yogesh Patel

320

Dưới đây là danh sách tôi thường đề cập đến cho loại thông tin này:

Request.ApplicationPath :   /virtual_dir
Request.CurrentExecutionFilePath :  /virtual_dir/webapp/page.aspx
Request.FilePath :  /virtual_dir/webapp/page.aspx
Request.Path :  /virtual_dir/webapp/page.aspx
Request.PhysicalApplicationPath :   d:\Inetpub\wwwroot\virtual_dir\
Request.QueryString :   /virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.AbsolutePath :  /virtual_dir/webapp/page.aspx
Request.Url.AbsoluteUri :   http://localhost:2000/virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Host :  localhost
Request.Url.Authority : localhost:80
Request.Url.LocalPath : /virtual_dir/webapp/page.aspx
Request.Url.PathAndQuery :  /virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Port :  80
Request.Url.Query : ?q=qvalue
Request.Url.Scheme :    http
Request.Url.Segments :  /
    virtual_dir/
    webapp/
    page.aspx

Hy vọng bạn sẽ tìm thấy điều này hữu ích!


1
1) Ngoài ra còn có Request.RawUrl; 2) Request.Url có thể ném ngoại lệ vào 'đường dẫn được yêu cầu rất xấu'.
dùng2864740

Câu trả lời rất hữu ích, nhưng các số cổng không nhất quán để tránh nhầm lẫn (giả sử tất cả các ví dụ là cho cùng một yêu cầu? Ví dụ: Chính quyền và Cổng ngụ ý cổng 80 nhưng AbsoluteUri chứa cổng 2000)
Young Bob

Request.QueryStringq=qvaluechỉ trở về
Marcel

74
Request.Url.AbsoluteUri

Khách sạn này làm mọi thứ bạn cần, tất cả chỉ trong một cuộc gọi ngắn gọn.


6
+1. Đây là câu trả lời tốt nhất. Nên được ưu tiên hơn Request.Url.ToString ().
Todd Menier

10

Đối với ASP.NET Corebạn sẽ cần đánh vần nó ra:

@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}")

Hoặc bạn có thể thêm một tuyên bố sử dụng vào chế độ xem của bạn:

@using Microsoft.AspNetCore.Http.Extensions

sau đó

@Context.Request.GetDisplayUrl()

_ViewImports.cshtmlthể là một nơi tốt hơn cho điều đó@using


1
Cảm ơn. Điều này đã giúp!
FlyingV


9

nếu bạn cần URL đầy đủ vì mọi thứ từ http đến chuỗi truy vấn, bạn sẽ cần nối các biến sau

Request.ServerVariables("HTTPS") // to check if it's HTTP or HTTPS
Request.ServerVariables("SERVER_NAME") 
Request.ServerVariables("SCRIPT_NAME") 
Request.ServerVariables("QUERY_STRING")

2
Điều này không tính đến các cổng không chuẩn (nghĩa là không sử dụng cổng 80 cho http)
Spongeboy

1
bạn có thể sử dụng Request.ServerVariables ("SERVER_PORT") để phát hiện cổng!
armen

1
Lưu ý rằng câu trả lời này sử dụng cú pháp VB.Net. Trong C #, sử dụng Request.ServerVariabled ["HTTPS"] chẳng hạn.
jaycer

7

Sử dụng Request.Url.OriginalStringtốt hơn Request.Url.ToString()(theo MSDN )


Nó chỉ tốt hơn nếu bạn thực sự yêu cầu chuỗi gốc.
Dirk

@DirkThe from link to MSDN ở trên: "Chuỗi được trả về bởi phương thức ToString có thể chứa các ký tự điều khiển, có thể làm hỏng trạng thái của ứng dụng bảng điều khiển. Bạn có thể sử dụng phương thức GetComponents với định dạng UriFormat.SafeUnescoped để xóa các ký tự điều khiển khỏi chuỗi được trả về . "
Eni

Chính xác, và điều đó không có gì để làm OriginalString.
Dirk

5

Cảm ơn các bạn, tôi đã sử dụng kết hợp cả hai câu trả lời của bạn @Christian và @Jonathan cho nhu cầu cụ thể của tôi.

"http://" + Request.ServerVariables["SERVER_NAME"] +  Request.RawUrl.ToString()

Tôi không cần phải lo lắng về http an toàn, cần biến tên máy chủ và RawUrl xử lý đường dẫn từ tên miền và bao gồm chuỗi truy vấn nếu có.


2
Bạn cũng nên biết rằng RawUrl, không giống như Request.Url, đại diện cho url yêu cầu ban đầu, chưa được ánh xạ nếu ánh xạ url đang được sử dụng.
harpo

SERVER_NAME thường không trả về URL "thực" được khách hàng sử dụng. HTTP_HOST có lẽ là hình thức tốt hơn nếu đi sâu vào trực tiếp .. cũng bỏ lỡ cổng HTTP đơn giản đến cổng khác.
dùng2864740

1

Nếu bạn cũng cần số cổng, bạn có thể sử dụng

Request.Url.Authority

Thí dụ:

string url = Request.Url.Authority + HttpContext.Current.Request.RawUrl.ToString();

if (Request.ServerVariables["HTTPS"] == "on")
{
    url = "https://" + url;
}
else 
{
    url = "http://" + url;
}

1

Hãy thử như sau -

var FullUrl = Request.Url.AbsolutePath.ToString();
var ID = FullUrl.Split('/').Last();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.