ASP.NET MVC - создание маршрутов без Http / контекст запроса - PullRequest
9 голосов
/ 19 декабря 2009

Я хотел бы иметь возможность генерировать URL-адреса из коллекции RouteCollection без доступа к HttpContext. Рассматривая способ реализации RouteCollection, все методы требуют доступа к RequestContext для получения виртуального пути.

Я работал над этим, высмеивая HttpContext, но это добавляет неловкую зависимость от RhinoMocks и не является разумным решением. Есть ли у меня другие варианты создания URL-адресов вне контекста?

Ответы [ 2 ]

3 голосов
/ 30 декабря 2009

Отличный вопрос, действительно. Сама маршрутизация имеет некоторые зависимости от вызова из запущенного приложения ASP.NET, например получение корневого URL-адреса приложения, а также любых форм без файлов cookie или файлов cookie сеанса, которые также входят в URL-адрес. Хотя создание фиктивных объектов является теоретическим решением, его, безусловно, не рекомендуется использовать во время выполнения.

Моя рекомендация заключается в том, чтобы вообще не использовать маршрутизацию в этой ситуации и жестко закодировать URL-адреса в электронные письма. Ссылки в электронном письме должны иметь полностью определенные URL-адреса (имя хоста + путь), а маршрутизация не может даже генерировать имя хоста для URL-адреса, так что это то, что вам уже придется жестко кодировать.

1 голос
/ 19 декабря 2009

Извините, но привыкайте к насмешкам в рамках MVC. Как только вы приступите к тестированию, оно вам понадобится. Там так много всего: HttpContext, Session, Server - все, что просачивается в ваш контроллер. Если вы хотите сгенерировать путь, вам нужно либо поговорить с HttpContext (в MVC это на самом деле HttpContextBase, так что вы можете написать свою конкретную реализацию, я полагаю), либо вам нужно смоделировать его.

...