2015-07-28 2 views
2

Я хочу создать Url, основанный на значении Action/Controller + route.Как создать Url без UrlHelper?

Я знаю, что можно использовать UrlHelper.Action, но я запускаю метод асинхронным способом, поэтому HttpContext.Current будет всегда null.

Есть ли другие объекты для создания URL-адреса?

Я видел несколько примеров, но мне нужно знать о ситуации, когда я не знаю названия домена (имя хоста или имя_приложения), и ему нужно создать URL-адрес только на основе Action + Controller + Значения маршрута.

Поскольку я еще ничего не создал, у меня нет никакого кода для показа.

ответ

0

Вы можете создать базу URL перед вызовом метода async (у вас есть контекст в этой точке), а затем заполнить оставшиеся значения, когда вы закончите выполнение метода.

+1

@ Francisco-godenstein, к несчастью, это не вариант для меня ... это исправит мою проблему, но есть два разных контекста (контроллер/класс) – Dan

+0

Не могли бы вы дать мне больше информации об этом? на основе вашего описания мое решение кажется прекрасным. –

+0

У меня есть класс, который создает объект, и я получаю в качестве параметра имя действия, имя контроллера и значения маршрута. Мой контроллер получает доступ к бизнес-слову, который вызывает метод async, который вызывает объект для моего клиента через SignalR. Этот объект будет иметь ссылку, состоящую из информации этих параметров. Я мог бы исправить это, выполнив то, что вы сказали, но, поскольку я могу получить имя действия, контроллер плюс значения маршрута, у меня нет другого выбора. – Dan

0

Попробуйте запустить RouteTable.Routes. Найдите наиболее подходящий и сформируйте URL-адрес. Что-то вроде этого

foreach (var rr in RouteTable.Routes){ 
    var r=(Route)rr; 
    if (r.Defaults["controller"].ToString()=="myController" && ...){ 
    return r.Url+"?"+routeValue1.Key+"="+routeValue1.Value ... 

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

Смежные вопросы