2012-03-29 6 views
8

Obecnie testuję witrynę z wieloma subdomenami wskazującymi tę samą aplikację ASP.NET, a routing obsługuje to, co zrobić z każdym żądaniem.Nazwa hosta pliku plików nie jest zwracana w języku C# ASP.NET MVC

Do testowania dodałem kilka subdomen do mojego "pliku hostów", np. "127.0.0.1 admin.TestDomain.com", który działa poprawnie.

Jednak problem polega na tym, że wywołując dowolną funkcję w języku C#, aby uzyskać nazwę hosta/domenę/adres URL (HttpContext.Current.Request.Url ...), adres URL hosta zawsze wraca z "localhost", zamiast "TestDomain".

Jakieś pomysły, dlaczego ta nazwa jest rozwiązywana w ten sposób i gdzie mogę zdobyć "TestDomain.com"?

+0

W jaki sposób próbujesz uzyskać nazwę hosta/domenę/adres URL? –

+0

Próbowałem na wiele sposobów, ale wszystkie one zawierają klasę HttpContext.Current.Request.Url i nie mogę znaleźć "TestDomain" w dowolnym miejscu podczas sprawdzania tej klasy podczas przerwy w debugowaniu. –

+0

Mógłbyś być bardziej konkretny; pokaż nam działanie kontrolera i * dokładnie * kod i * dokładnie * co daje wynik? Ponadto, co masz pod kontrolą, gdy otrzymasz wyniki, o których wspomniałeś? I jakie przeglądarki? Pytam, ponieważ sam nie widziałem tego zachowania, więc chciałbym spróbować je skopiować. –

Odpowiedz

11

Wydaje mi się, oryginalny host jest tracony po mapowaniu domeny na adres IP (localhost) przez lokalny system operacyjny z plikiem "hosta". Można spróbować RawUrl zamiast pobierać dokładny adres URL wpisany w przeglądarce:

HttpContext.Current.Request.RawUrl 

Ponadto można spróbować sprowadzić HTTP_HOST zmienną z użytkownikiem Host: nagłówka żądania, powinna ona zawierać oryginalną hosta (nie adres lub domyślnego hosta z serwer) próbuje zażądać:

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

Może będzie pomocny artykuł o numerze Getting parameters from RawUrl.

+0

Sam to rozważyłem, ale z pytania myślę, że używa on Routingu URL, który jest domyślnie używany w ASP.NET MVC. Routing właściwie nie przepisuje (jak to jest domyślnie używane) i nie wydaje mi się, żebym sam widział podobne zachowanie; Zawsze widzę dokładnie to, co jest na pasku adresu jako "Host". Myślę! Ale to jest zdecydowanie coś, na co warto przyjrzeć się bliżej ... –

+0

Przykład różnicy między Routingiem a przepisaniem: Podczas korzystania z przepisywania dzienniki IIS faktycznie pokazują * przepisany * adres URL, co wyjaśnia, dlaczego informacje w tej odpowiedzi są poprawne przepisanie. Routing prowadzi jednak do tych samych adresów URL, które są wyświetlane w dziennikach usług IIS zgodnie z żądaniem. –

+0

Jestem pewien, że problem pojawił się przed routingiem MVC. Tak, masz rację, jeśli chodzi o ponowne pisanie - właściwie * mapowanie * domeny na IP = localhost wykonywane przez lokalny system operacyjny (poprawiony, dziękuję za uwagi). Przeglądarka żądająca hosta TestDomain.com uzyskała dostęp do 127.0.0.1, a następnie serwer w jakiś sposób wierzy, że jest to host lokalny. W każdym razie nagłówek 'Host:' żądania HTTP powinien być oryginalny TestDomain.com –