2013-08-18 17 views
13

Tôi đã kế thừa ứng dụng web ASP.NET được viết bằng C#. Ở nhiều trang trong trang web tên máy được lấy bằng:Yêu cầu.Url.Host so với Yêu cầu.Url.Authority

BaseHost = Request.Url.Host; 

Kể từ khi tôi đang sử dụng Visual Studio 2012 Express và nó được cài đặt máy chủ IIS tốc địa phương, tôi dường như bị mắc kẹt với một số cổng nối vào hostname (localhost) khi tôi gỡ lỗi/chạy cục bộ. Đoạn mã trên không dẫn đến số cổng được bao gồm và các liên kết ngắt như vậy được tạo bởi mã (liên kết mục menu, chuyển hướng, v.v.).

tôi thấy rằng tôi có thể khắc phục vấn đề này bằng cách thay đổi mã để:

BaseHost = Request.Url.Authority; 

này dường như để sửa chữa nó bằng cách bao gồm các cổng khi tôi đang chạy cục bộ (localhost: 4652) và khi xuất bản của tôi máy chủ dàn dựng (development.mysite.com).

Câu hỏi của tôi: Biểu mẫu này có tệ không? Có một thời gian hoặc một tình huống trong đó điều này sẽ gây ra vấn đề trên trang web trực tiếp của tôi? Nó chỉ có vẻ dễ dàng hơn nhiều để làm một thay thế nhanh chóng của tất cả các trường hợp này. Tôi đã xem xét viết một thói quen nhỏ để nối thêm : with Request.Url.Port, nhưng có vẻ dễ dàng hơn khi sử dụng Request.Url.Authority. Quá dễ dàng có thể ...

Tôi đã cố gắng nghiên cứu câu hỏi của mình trực tuyến và tại MSDN, nhưng tôi không thấy câu trả lời.

Trả lời

14

Theo MSDNAuthority bao gồm số cổng trong khi Host thì không. Một khía cạnh khác là Authority sẽ thoát khỏi các ký tự dành riêng nếu cần thiết.

Mà không biết ứng dụng của bạn thật khó để nói cho dù đó là một ý tưởng tốt, nhưng nhìn chung tôi sẽ nghi ngờ rằng nó sẽ không phá vỡ bất cứ điều gì ... để đi về phía trước ...

lựa chọn khác là chạy IIS ứng dụng thay vì IIS Express ...

+0

Một nghi ngờ nhỏ. nếu tôi chạy các ứng dụng trong localhost tôi có số cổng trong URL của tôi nhưng trong sản xuất tôi không có số cổng trong URL. Vì vậy, tôi có thể tự do sử dụng Url.Authority phải không? Tôi có nghĩa là nếu số cổng không có thì URl.Authority sẽ hành động giống như URL.Host đúng. Tôi có nghĩa là tôi vẫn có thể lấy URL đúng cách? xin vui lòng hướng dẫn cho tôi,. – Unbreakable

2

Vấn đề của tôi với điều này là nó luôn luôn thêm cổng, ngay cả khi cổng không được yêu cầu. Ví dụ, trong một môi trường máy chủ sản xuất đằng sau một bức tường lửa trên một cặp máy chủ web cân bằng tải, nó tiếp tục đặt cổng tường lửa tại chỗ, nhưng điều đó làm cho URL bị hỏng vì cổng được gắn với một máy chủ web cụ thể trong trang trại máy chủ sẽ không ánh xạ chính xác thông qua tường lửa. Vì vậy, tôi sẽ rất cẩn thận với phương pháp này nếu bạn đang sử dụng nó trên nhiều máy chủ. Nó gây ra sự cố vi phạm với ứng dụng của chúng tôi và phải được hoàn nguyên về sử dụng Url.Host. Thêm vào đó, nó làm cho URL của web sản xuất trông kỳ lạ với số cổng.

+0

Tôi chỉ thấy Cơ quan có chứa cổng nếu URL có cổng. Vì vậy, tôi nghĩ rằng nó không LUÔN thêm cổng. – Bochu

+0

Nó chắc chắn luôn luôn thêm nó vào một tình trạng trang trại máy chủ (máy chủ web cân bằng tải) ngay cả khi cổng không phải là một phần của URL trong trình duyệt. Vì vậy, có lẽ đó là nhiều hơn một điểm thận trọng như tôi đã nói cho việc sử dụng nó với nhiều máy chủ đằng sau một cân bằng tải. – HBlackorby

+0

Một nghi ngờ nhỏ. nếu tôi chạy các ứng dụng trong localhost tôi có số cổng trong URL của tôi nhưng trong sản xuất tôi không có số cổng trong URL. Vì vậy, tôi có thể tự do sử dụng Url.Authority phải không? Tôi có nghĩa là nếu số cổng không có thì URl.Authority sẽ hành động giống như URL.Host đúng. Tôi có nghĩa là tôi vẫn có thể lấy URL đúng cách? xin vui lòng hướng dẫn cho tôi,. – Unbreakable

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