Posiadamy od dawna działającą aplikację ASP.NET, która urodziła się w .NET 1.1/IIS6 dni. Obecnie korzystamy z platformy .NET4.5/IIS7, ale nic nie zrobiliśmy z MVC.Przepisywanie adresów URL w ASP.NET 4.5 i Web API
Zapewniamy katalog dla klientów i dać im URL mogą używać:
www.ourhost.com/customername
Korzystanie zwyczaj IHttpModule mamy rozwiniętą ciągniemy „CustomerName” z adresu URL, aby znaleźć klienta w bazie danych. Identyfikator klienta jest następnie przechowywany w kontekście strony * i używany przez praktycznie wszystkie strony w witrynie w celu dostosowania zawartości dla tego klienta. Po tym procesie, powyższy adres URL może być zapisane i przetwarzane jako
www.ourhost.com/index.aspx
z index.aspx dostępu do ID klienta poprzez jego kontekstu i może to, co robi.
Działa to świetnie i obsługujemy z nim kilka tysięcy klientów. logika przepisywania jest dość złożona, ponieważ sprawdza konta klientów, przekierowuje na stronę "uh oh", jeśli klient jest nieważny i na inną stronę "znajdź dealera", jeśli klient nie zapłacił itp. itp.
Teraz chciałbym zbudować niektóre kontrolery Web API i przerobienie stylu MVC mnie martwi. Widzę wiele przykładów, gdzie zdarza się, aby przepisywanie URL jak tej pracy:
www.ourhost.com/api/{controller}
ale nadal muszę te API sieci połączeń, aby się zdarzyć w kontekście klienta. Nasze strony stają się coraz bardziej wyrafinowane dzięki asynchronicznym połączeniom JSON/AJAX, ale w odpowiedzi na te połączenia wciąż potrzebuję kontekstu klienta. Chciałbym URL, aby być
www.ourhost.com/customername/api/{controller}
Ale jestem zakłopotany, jak skonfigurować routing, aby to zrobić i to grać ładnie z naszej IHttpModule.
Czy to możliwe?
* AKTUALIZACJA: Kiedy mówię "zapisany w kontekście strony" mam na myśli HttpContext powiązany z każdym żądaniem internetowym, który zawiera słownik, w którym mogę przechowywać pewne dane dotyczące strony/żądania.
Kiedy mówisz "zapisany w kontekście strony" - czy odnosisz się do obiektu 'Sesja', czy też piszesz bezpośrednio do' Cookie' jakiegoś rodzaju? Ponieważ oznaczono to jako 'web-api', robi to niewielką różnicę. –
@ Troy: Dziękuję za komentarz - zaktualizowałem moje pytanie z wyjaśnieniem. – n8wrl
Rozumiem - używasz 'HttpContext.Current.User' do śledzenia kto jest zalogowanym użytkownikiem? Jak utrzymujesz go w kolejnych rozmowach, które nie zawierają nazwy użytkownika użytkownika w adresie URL? –