2013-08-18 8 views
13

Odziedziczyłem aplikację WWW ASP.NET napisaną w języku C#. W wielu stron w całej witrynie nazwa hosta jest pobierany za pomocą:Request.Url.Host vs Request.Url.Authority

BaseHost = Request.Url.Host; 

Ponieważ używam Visual Studio 2012 Express i jego zainstalowaniu lokalnego serwera IIS Express,, I wydają się być zatrzymany z numerem portu przyłączonej do hosta (localhost) podczas debugowania/uruchamiania lokalnie. Powyższy kod nie powoduje dołączenia numeru portu i jako taki powoduje zerwanie odsyłaczy generowanych przez kod (łącza do elementów menu, przekierowania itp.).

widzę, że mogę rozwiązać ten problem przez zmianę kodu do:

BaseHost = Request.Url.Authority; 

Wydaje się to naprawić, w tym port kiedy biegnę lokalnie (localhost: 4652) i gdy opublikowane na moim serwer pomostowy (development.mysite.com).

Moje pytanie: czy to jest ta zła forma? Czy jest jakiś czas lub sytuacja, w której spowoduje to problemy w mojej witrynie na żywo? Po prostu wydaje się znacznie łatwiejsze szybkie zastąpienie wszystkich tych instancji. Zastanawiałem się nad napisaniem małej procedury dodawania : with Request.Url.Port, ale wydaje się łatwiejsze użycie tylko Request.Url.Authority. Zbyt łatwo może ...

Próbowałem sprawdzić moje pytanie przez Internet i na stronie MSDN, ale nie widzę odpowiedzi.

Odpowiedz

14

Według Authority zawiera numer portu, natomiast Host nie. Innym aspektem jest to, że w razie potrzeby Authority będzie zawierać znaki zastrzeżone.

Bez znajomości aplikacji trudno jest powiedzieć, czy jest to dobry pomysł, ale w ogóle to podejrzewam, że nie złamie nic ... więc śmiało ...

Innym rozwiązaniem jest uruchom aplikację IIS zamiast IIS Express ...

+0

Jedna drobna wątpliwość. jeśli uruchomię aplikację w localhost, mam numer portu w moim adresie URL, ale w produkcji nie mam numeru portu w adresie URL. Więc mogę swobodnie korzystać z Url.Authority, prawda? Chodzi mi o to, że jeśli nie ma numeru portu, URl.Authority będzie działać tak samo jak URL.Host prawo. Mam na myśli, że nadal będę w stanie poprawnie odczytać adres URL? proszę, prowadź mnie,. – Unbreakable

2

Mój problem polega na tym, że ZAWSZE dodaje port, nawet gdy port nie jest wymagany. W niektórych przypadkach może to powodować problemy z wieloma serwerami. Na przykład w środowisku serwera produkcyjnego za zaporą ogniową na parze serwerów WWW z obciążeniem zbalansowanym nadal umieszczano port zapory sieciowej, ale powodowało to przerwanie adresu URL, ponieważ port był powiązany z określonym serwerem WWW w farmie serwerów, który nie byłby poprawnie mapowany przez zaporę sieciową. Byłbym bardzo ostrożny z tą metodą, jeśli używasz jej na wielu serwerach. Powodowało to problem z naszą aplikacją i musiało zostać przywrócone do użycia Url.Host. Dodatkowo sprawił, że URL strony produkcyjnej wyglądał dziwnie na podstawie numeru portu.

+0

Widzę tylko, że Urząd zawiera port, jeśli URL ma port. Więc myślę, że nie dodaje ZAWSZE portu. – Bochu

+0

Zdecydowanie zawsze dodaje go do sytuacji w farmie serwerów (serwery WWW z obciążeniem), nawet jeśli port nie jest częścią adresu URL w przeglądarce. Być może jest to kwestia ostroŜności, poniewaŜ powiedziałem, Ŝe korzystałem z wielu serwerów za modułem równoważenia obciążenia. – HBlackorby

+0

Jedna drobna wątpliwość. jeśli uruchomię aplikację w localhost, mam numer portu w moim adresie URL, ale w produkcji nie mam numeru portu w adresie URL. Więc mogę swobodnie korzystać z Url.Authority, prawda? Chodzi mi o to, że jeśli nie ma numeru portu, URl.Authority będzie działać tak samo jak URL.Host prawo. Mam na myśli, że nadal będę w stanie poprawnie odczytać adres URL? proszę, prowadź mnie,. – Unbreakable