Ich möchte in der Lage sein, URLs von einer RouteCollection zu generieren, ohne Zugriff auf den HttpContext zu haben. Bei der Implementierung von RouteCollection benötigen alle Methoden Zugriff auf einen RequestContext, um den virtuellen Pfad abzurufen.
Ich habe daran gearbeitet, indem ich den HttpContext gespottet habe, aber das fügt eine unangenehme Abhängigkeit von RhinoMocks hinzu und ist keine vernünftige Lösung. Verfüge ich über andere Optionen zum Generieren von URLs außerhalb des Kontexts?
Eine wirklich große Frage. Das Routing selbst hat einige Abhängigkeiten davon, dass es von einer laufenden ASP.NET-Anwendung aufgerufen wird, z. B. das Abrufen der Anwendungsstamm-URL sowie aller cookieloser Formulare oder Sitzungscookies, die ebenfalls in der URL enthalten sind. Während das Erstellen von Mock-Objekten eine theoretische Lösung ist, wird es zur Laufzeit nicht empfohlen.
Ich empfehle, für diese Situation überhaupt kein Routing zu verwenden und die URLs fest in die E-Mails zu schreiben. Links in einer E-Mail müssen über vollständig qualifizierte URLs (Hostname + Pfad) verfügen, und Routing kann nicht einmal den Hostnamen für die URL generieren, also müssen Sie dies bereits mit einem Hardcode versehen.
Tut mir leid, aber gewöhne dich daran, im MVC-Framework zu spotten. Sobald Sie mit dem Testen beginnen, werden Sie es brauchen. Es gibt so viel zu tun: HttpContext, Session, Server - alles, was in Ihren Controller eindringt. Wenn Sie den Pfad generieren möchten, müssen Sie entweder mit dem HttpContext sprechen (in MVC ist dies tatsächlich HttpContextBase, also können Sie Ihre eigene konkrete Implementierung schreiben, denke ich), oder Sie müssen es verspotten.
Tags und Links asp.net-mvc routing httpcontext