2008-11-04 19 views
29

Jak uzyskać pełny adres URL żądania (w tym ciąg zapytania) w moim kontrolerze? Czy jest to kwestia połączenia moich parametrów adresu URL i formularza, czy jest lepszy sposób?Uzyskaj pełny adres URL żądania, w tym parametry w kontrolerze

Sprawdziłem pytanie this, ale wygląda na to, że nie dotyczy to MVC.

Popraw mnie, jeśli się mylę.

Niektóre bardziej szczegółowe informacje:

Moje wezwanie do mojego SearchController.AdvancedSearch() pochodzi od postaci z około 15 opcjonalnych parametrów. Ze względu na liczbę parametrów i brak możliwego (jak sądzę) sposobu przekazania parametrów opcjonalnych w czysty sposób, wybrałem ciąg znaków catchall, który jest obsługiwany w kontrolerze.

Teraz chcę, aby mój kontroler zapisał wywołanie w komponencie nawigacyjnym, aby po kliknięciu miękiszu dokładnie ten sam wynik mógł zostać pobrany (z wszystkimi, ale nie więcej, z dołączonych argumentów). Aby to zrobić, potrzebuję całego request.URL, , w tym querystring.

W Request.RawURL, request.URL itp. Ten ciąg zapytania nie został uwzględniony. W rzeczywistości obecnie wykonuję zwykłą funkcję.

String.Format("{0}/{1}", request.Url, request.form) 

Daje mi to pewne dziwne wyniki (np. Wartości przycisków wysyłania itp.), Ale działa. Jeśli istnieją sugestie, jak zrobić to mniej brzydkie włamanie, proszę powiedz.

Wiem, gdzie znaleźć bieżącą prośbę, ale nie wydaje mi się, aby znaleźć nieprzetworzony adres URL w dowolnym miejscu. Wszyscy są pozbawieni querystringu i ja też tego potrzebuję.

Mój kontroler aktualizuje zbiór adresów URL w moim komponencie BreadCrumb. Dlatego potrzebuje adresu URL żądania. Jak sugerujesz, że podchodzę do tego problemu?

Odpowiedz

37

Można użyć Request.Url.PathAndQuery.

MVC5: użyj Request.RequestUri.PathAndQuery

+2

Heh, dziękuję za odpowiedź, chociaż pytanie to ma 2 lata;) W międzyczasie pojawiły się dwie kolejne wersje MVC, a opcjonalne parametry są wsparte przez framework MVC, powodując problem sporny. –

1

można uzyskać u aktualnego zapytania obiektu za pomocą:

HttpContext.Current.Request 

Jednak Muszę zapytaj - dlaczego chcesz żądania URL? W ten sposób uzależniłeś swój kontroler od obiektu Request, co znacznie utrudnia pisanie testów jednostkowych.

21
HttpContext.Current.Request.RawUrl 
HttpContext.Current.Request.QueryString 

Co do drugiego pytania. Zamiast śledzić adresy URL, informacje o ciągach zapytań itd., Które odwiedził Twój użytkownik. Śledź kontrolery i akcje wywoływane. To całkowicie wyeliminowałoby potrzebę obiektu żądania.

+0

Dzięki za odpowiedź. Zaktualizuję moje pytanie, aby moja sytuacja stała się bardziej jasna. Proszę spojrzeć. –

0

W kontrolerze można uzyskać dostęp do Request.RawUrl.

+0

Dzięki za odpowiedź, ale prośba.rawurl nie zawiera querystringa –

2
Request.RawUrl 

pomocą tej właściwości jest zwrócić wszystkie URL.

Powiązane problemy