Как построить маршрут без ViewContext в ASP.NET MVC? - PullRequest
7 голосов
/ 07 апреля 2009

Я хочу создать маршрут из служебного класса, который не имеет доступа к ViewContext.

Возможно ли это? Кажется, нет никакого эквивалента ViewContext.Current

Я пробовал ловить рыбу во всех конструкторах для Routing и HttpContext, но не могу полностью получить то, что хочу.

Это то, что я ищу - хотя это не работает, потому что RouteTable.Routes имеет тип RouteCollection, а не RouteData. Так близко - пока так далеко: -)

        RequestContext requestContext = new RequestContext(HttpContext.Current, RouteTable.Routes);
        UrlHelper url = new UrlHelper(requestContext);
        var urlString = url.RouteUrl(new {controller="DynamicImage", action="Button", text="Hello World"});

Примечание: RequestContest имеет тип System.Web.Routing.RequestContext, а не HttpContext

1 Ответ

11 голосов
/ 07 апреля 2009

Попробуйте это:

var httpContext = new HttpContextWrapper(HttpContext.Current);
var requestContext = new RequestContext(httpContext);
var urlHelper = new UrlHelper(requestContext, new RouteData()));

Надеюсь, это поможет

ОБНОВЛЕНИЕ:

Предыдущее неверно (я выложил это из моей памяти). Попробуйте вместо этого (это работает в одном из моих проектов):

var httpContext = new HttpContextWrapper(HttpContext.Current);
var requestContext = new RequestContext(httpContext, new RouteData());
var urlHelper = new UrlHelper(requestContext);

new RouteData() использует только для инициализации RequestContext, а new UrlHelper(requestContext) фактически вызывает new UrlHelper(requestContext, RouteTable.Routes)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...