2012-03-29 31 views
8

Tôi hiện đang thử nghiệm một trang web có nhiều tên miền con trỏ tới cùng một ứng dụng ASP.NET và định tuyến xử lý việc cần làm với mỗi yêu cầu.Tên máy chủ lưu trữ tệp không được trả lại trong C# ASP.NET MVC

Để thử nghiệm, tôi đã thêm một số tên miền phụ vào "tệp máy chủ" của tôi, ví dụ: "127.0.0.1 admin.TestDomain.com", hoạt động tốt.

Tuy nhiên, vấn đề là khi tôi gọi bất kỳ hàm nào trong C# để lấy tên máy chủ/tên miền/url (HttpContext.Current.Request.Url ...), url máy chủ luôn quay trở lại với "localhost", thay vì "TestDomain".

Bất kỳ ý tưởng nào tại sao tên này đang được giải quyết theo cách này và nơi tôi có thể giữ "TestDomain.com"?

+0

Bạn đang cố gắng "nhận tên máy chủ lưu trữ/tên miền/url" như thế nào? –

+0

Đã thử nhiều cách, nhưng tất cả chúng đều liên quan đến lớp HttpContext.Current.Request.Url và tôi không thể tìm thấy "TestDomain" ở bất kỳ đâu khi kiểm tra lớp đó trên một ngắt lỗi. –

+0

Bạn có thể vui lòng cụ thể hơn không; cho chúng ta thấy một hành động điều khiển và * chính xác * mã, và * chính xác * những gì nó xuất ra? Ngoài ra, những gì bạn đang chạy theo khi bạn nhận được kết quả bạn đề cập đến? Và trình duyệt nào? Tôi hỏi vì bản thân tôi không thấy hành vi này, nên tôi muốn thử lặp lại nó. –

Trả lời

11

Tôi nghĩ, máy chủ gốc bị mất sau khi ánh xạ tên miền tới địa chỉ IP (máy chủ cục bộ) bằng hệ điều hành cục bộ với tệp "máy chủ lưu trữ" của bạn. Bạn có thể thử RawUrl thay vì để lấy URL chính xác gõ vào trình duyệt:

HttpContext.Current.Request.RawUrl 

Ngoài ra bạn có thể thử để lấy HTTP_HOST biến từ người dùng Host: yêu cầu tiêu đề, nó nên chứa máy chủ gốc (không giải quyết hoặc máy chủ mặc định của máy chủ) trình duyệt cố gắng yêu cầu:

string requestedDomain = HttpContext.Current.Request.ServerVariables["HTTP_HOST"]; 

Bài viết có thể Getting parameters from RawUrl bài viết sẽ hữu ích.

+0

Tôi đã tự xem xét điều này, nhưng từ câu hỏi tôi nghĩ anh ta đang sử dụng Định tuyến URL được sử dụng theo mặc định trong ASP.NET MVC. Định tuyến thực sự không viết lại (như được sử dụng theo mặc định), và tôi không nghĩ rằng tôi đã nhìn thấy hành vi tương tự bản thân mình; Tôi luôn thấy chính xác những gì trong thanh địa chỉ là 'Máy chủ'. Tôi nghĩ! Nhưng đây chắc chắn là một cái gì đó để xem xét kỹ hơn ... –

+0

Một ví dụ về sự khác biệt giữa Định tuyến và Viết lại: Khi sử dụng Viết lại, Nhật ký IIS thực sự hiển thị URL * đã viết lại, giải thích tại sao thông tin trong câu trả lời này chính xác về viết lại. Tuy nhiên, định tuyến sẽ dẫn đến các URL giống nhau hiển thị trong nhật ký IIS như được yêu cầu. –

+0

Tôi chắc chắn rằng sự cố đã xuất hiện trước khi định tuyến MVC. Có bạn đúng, liên quan đến việc viết lại - thực sự có * ánh xạ * của miền tới IP = localhost được thực hiện bởi hệ điều hành cục bộ (được sửa chữa, Cảm ơn bạn đã ghi chú). Trình duyệt yêu cầu máy chủ TestDomain.com truy cập 127.0.0.1, sau đó máy chủ bằng cách nào đó tin rằng nó là một localhost. Dù sao 'Host:' tiêu đề của yêu cầu HTTP phải là bản gốc TestDomain.com –

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