ASP.NET MVC: Как создать применимый экземпляр UrlHelper?

Я использую quartz.net для планирования регулярных событий в рамках asp.net mvc приложение.

Запланированное задание должно назвать сценарий уровня служб, который требует экземпляра UrlHelper (для создания URL на основе правильных маршрутов (via urlHelper.Action(..)) содержавшийся в электронных письмах, которые будут посланы сервисом).

Я не хочу к hardcode ссылки в электронные письма - они должны быть разрешены с помощью urlhelper.

Задание:

public class EvaluateRequestsJob : Quartz.IJob
{
    public void Execute(JobExecutionContext context)
    {
        //  where to get a usable urlHelper instance?
        ServiceFactory.GetRequestService(urlHelper).RunEvaluation();
    }
}

Обратите внимание на то, что это не выполняется в конвейере MVC. Нет никакого текущего подаваемого запроса, код выполняется Кварцевым планировщиком в определенные времена.

Как я получаю экземпляр UrlHelper, применимый на обозначенном месте?

Если не возможно создать UrlHelper, другая опция, которую я вижу, состоит в том, чтобы заставить задание "самоназвать" действие контроллера путем выполнения Запроса HTTP - при выполнении действия, я буду, конечно, иметь экземпляр UrlHelper в наличии - но это кажется небольшим hacky мне.

15
задан Marek 9 March 2010 в 22:19
поделиться

3 ответа

Как насчет того, чтобы просто создать новый HttpContext для UrlHelpler, как в этом ответе :

5
ответ дан 1 December 2019 в 05:23
поделиться

Вам нужен RequestContext для создания UrlHelper. В одном из моих методов расширения HtmlHelper я делаю это так:

public static string ScriptUrl(this HtmlHelper html, string script)
{
    var url = new UrlHelper(html.ViewContext.RequestContext);
    ...
}

Как вы получаете RequestContext , зависит от вашего приложения.

-2
ответ дан 1 December 2019 в 05:23
поделиться

Редактировать: Извините, я неправильно прочитал вопрос.

Похоже, ваш планировщик (я понятия не имею, как он работает) - это отдельный процесс, и вы хотите, чтобы UrlHelper помогал генерировать действительные URL-адреса в вашем приложении MVC?

Вы можете попробовать написать обработчик в своем приложении MVC, который будет работать в контексте вашего приложения, который создаст для вас URL-адрес и вернет его. Затем вы можете вызвать обработчик из своего планировщика, чтобы получить любой URL-адрес, который вам нужен, на основе переданных вами параметров. Таким образом, ваш планировщик просто должен знать, где находится URL-адрес запроса вашего приложения MVC, а затем может попросить его сделать URL-адрес отображение для вас.

Надеюсь, это немного лучший ответ. Если я полностью отключен, дайте мне знать ... собирался удалить свой ответ, но подумал, что дам ему еще один шанс.

1
ответ дан 1 December 2019 в 05:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: