2009-02-19 56 views
47

Để đơn giản hơn cho một ứng dụng web chia sẻ tệp với ứng dụng khác trên một máy chủ khác, tôi đang sử dụng thẻ cơ sở href trong trang chính của mình. Như nhiều người đã phát hiện ra, điều này phá vỡ đường dẫn webform. Tôi có một lớp Form Adapter làm việc nhưng tôi không chắc chắn làm thế nào để có được đường dẫn tuyệt đối của url. Hiện nay, chương trình của tôi là hardcoded sử dụng một cái gì đó tương tự như:Đường dẫn tuyệt đối Asp.Net của URL

HttpContext Context = HttpContext.Current; 
value = "http://localhost" + Context.Request.RawUrl; 

Điều đáng chú ý là tôi đang thử nghiệm trên máy chủ IIS địa phương của tôi, vì vậy có một xu hướng xa lạ đối với rất nhiều thứ tôi đã cố gắng sử dụng theo thứ tự đường dẫn tuyệt đối không bao gồm tên miền (IIS cục bộ của tôi không hiển thị bên ngoài). Điều đó có nghĩa nó không phải là một con đường tuyệt đối và do đó cơ sở href sẽ phá hỏng nó.

Có cách nào tốt để xử lý việc này sao cho nó hoạt động cục bộ mà không cần mã hóa nhưng cũng sẽ hoạt động bình thường khi được tải lên máy chủ? Tôi muốn tránh bất cứ điều gì liên quan đến việc làm một cái gì đó khác nhau trên bản sao phía máy chủ.

Có, tôi nhận ra rằng tôi có thể sử dụng tệp web.config riêng tại địa phương và trên máy chủ để nhận thông tin này nhưng điều này rất xấu và vi phạm DRY.

+0

Tôi không chắc chắn nhưng, bạn có thử Request.Url.Host không? –

Trả lời

108

Tôi đã sử dụng này trong quá khứ:

// Gets the base url in the following format: 
// "http(s)://domain(:port)/AppPath" 
HttpContext.Current.Request.Url.Scheme 
    + "://" 
    + HttpContext.Current.Request.Url.Authority 
    + HttpContext.Current.Request.ApplicationPath; 
-9

Code:

string loginUrl = Request.Url.GetLeftPart(UriPartial.Authority) + VirtualPathUtility.ToAbsolute("~/") + "Login/Login.aspx?UserName=" + LoggedinUser["UserName"] + "&Password=" + LoggedinUser["Password"]; 
+7

Điều rất xấu để đặt mật khẩu vào URL. Đừng làm thế. –

2

Cũ bưu điện, nhưng đây là một phương pháp hơi ít tiết

var baseUri = new Uri(HttpContext.Current.Request.Url, "/"); 
0

Tôi đã sử dụng sau đây và nó làm việc cho tôi cả khách hàng và máy chủ.

string surl = string.Format("{0}://{1}", 
    HttpContext.Current.Request.Url.Scheme, 
    HttpContext.Current.Request.Url.Authority); 
Các vấn đề liên quan