2009-12-18 27 views
9

Chciałbym móc generować adresy URL z RouteCollection bez dostępu do HttpContext. Patrząc na sposób implementacji RouteCollection, wszystkie metody wymagają dostępu do RequestContext w celu uzyskania wirtualnej ścieżki.ASP.NET MVC - Generowanie tras bez kontekstu Http/Request

Pracowałem nad tym, kpiąc z HttpContext, ale to dodaje niezręczną zależność od RhinoMocks i nie jest rozsądnym rozwiązaniem. Czy mam inne opcje generowania adresów URL poza kontekstem?

Odpowiedz

1

Przepraszamy, ale przyzwyczaić się do kpiny w ramach MVC. Jak tylko przejdziesz do testowania, będziesz go potrzebować. Jest ich tak wiele: HttpContext, Session, Server - wszystkie rzeczy, które przeciekają do kontrolera. Jeśli chcesz wygenerować ścieżkę, musisz albo porozmawiać z HttpContext (w MVC, tak naprawdę jest to HttpContextBase, więc możesz napisać własną, konkretną implementację), albo musisz to udawać.

+1

Nie jestem przeciwnikiem kpiny z sytuacji testowych. Jednak nie robię tego w teście. Generuję wiadomości e-mail za pośrednictwem usługi asynchronicznej. Ponieważ jest on asynchroniczny, nie ma dostępu do HttpRequest. – bromanko

+0

Prawdopodobnie akcja rozpoczyna proces, który generuje wiadomości e-mail. Spróbuj wykonać wywołanie Routingu z działania (gdy masz dostęp do RequestContext), a następnie przekaż wynik do dowolnego procesu generującego wiadomości e-mail. – Levi

+0

Zdarzają się przypadki, w których wiadomości e-mail są generowane bez sieci trigerring je. Na przykład codzienne wiadomości e-mail lub e-maile z przypomnieniem. – bromanko

3

To wspaniałe pytanie. Sam routing ma pewne zależności od wywołania z działającej aplikacji ASP.NET, takie jak pobranie głównego adresu URL aplikacji, jak również wszelkich formularzy bez plików cookie lub plików cookie sesji, które również znajdują się w adresie URL. Podczas tworzenia próbnych obiektów jest rozwiązaniem teoretycznym, z pewnością nie jest zalecane do użycia w środowisku wykonawczym.

Moja rada jest taka, aby w ogóle nie używać routingu w tej sytuacji i sztywno zakodować adresy URL w wiadomościach e-mail. Łącza w wiadomościach e-mail muszą mieć w pełni kwalifikowane adresy URL (nazwa hosta + ścieżka), a routing nie może nawet wygenerować nazwy hosta dla adresu URL, więc jest to coś, co już trzeba było kodować.

Powiązane problemy