2012-11-07 14 views
28

Tôi đang gặp một ứng dụng địa phương trong đó có một con đường:HttpContext.Current.Request.Url.Host những gì nó trả về?

http://localhost:950/m/pages/Searchresults.aspx?search=knife&filter=kitchen 

nhưng khi điều này đi vào môi trường tích hợp hoặc có lẽ là sản xuất, nó sẽ là một cái gì đó giống như

http://www.someshopping.com/m/pages/SearchResults.aspx?search=knife&filter=kitchen 

Đối với một số trường hợp tôi cần để vượt qua chỉ:

www.someshopping.com 

đến file XSLT của tôi và trong một trong những chức năng tôi đang sử dụng này:

string currentURL = HttpContext.Current.Request.Url.Host; 

điều này trả lại cho tôi "localhost" trong môi trường cục bộ. cùng mã sẽ trở lại tôi:

www.someshopping.com trong sản xuất (Tôi KHÔNG cần http: //)

chỉ không muốn thực hiện bất kỳ cơ hội. Vì vậy, hỏi câu hỏi ngớ ngẩn này.

+3

có thể phải là 'string host = HttpContext.Current.Request.Url.Host;' – Spike0xff

Trả lời

38

Có, miễn là url bạn gõ vào trình duyệt www.someshopping.com và bạn không sử dụng url viết lại sau đó

string currentURL = HttpContext.Current.Request.Url.Host; 

sẽ trở lại www.someshopping.com

Lưu ý sự khác biệt giữa một địa phương môi trường gỡ lỗi và môi trường sản xuất

+0

Nó trả về tiêu đề 'HOSTNAME' hoặc địa chỉ cục bộ nếu tiêu đề không xuất hiện. Xem nguồn để biết chi tiết: https://referencesource.microsoft.com/#System.Web/HttpRequest.cs,36cdd1ccad69cf75 – Alex

15

Thuộc tính Host sẽ trả về tên miền bạn đã sử dụng khi truy cập trang web. Vì vậy, trong môi trường phát triển của bạn, vì bạn đang yêu cầu

http://localhost:950/m/pages/Searchresults.aspx?search=knife&filter=kitchen 

Nó đang trả lại localhost. Bạn có thể phá vỡ URL của bạn như sau:

Protocol: http 
Host: localhost 
Port: 950 
PathAndQuery: /m/pages/SearchResults.aspx?search=knight&filter=kitchen 
+0

Vì vậy, câu hỏi của tôi sẽ trả về www.someshopping.com trong môi trường sản xuất? :) –

+0

Có, giả sử URL bạn đang yêu cầu trong sản xuất là www.someshopping.com. – Tejs

3

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

string callbackurl = Request.Url.Host != "localhost" 
    ? Request.Url.Host : Request.Url.Authority; 

này sẽ làm việc cho địa phương cũng như môi trường sản xuất. Bởi vì địa phương sử dụng url với cổng no có thể sử dụng Url.Host.

+6

bạn nên luôn luôn sử dụng 'Request.IsLocal' để kiểm tra xem đó có phải là yêu cầu cục bộ hay không, không cần so sánh' Request.Url.Host' vì điều đó là sai nếu tôi thực sự viết 'http: // LocalHost/...' – balexandre

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