代码之家  ›  专栏  ›  技术社区  ›  Marek

ASP.NET MVC:如何创建可用的urlhelper实例?

  •  15
  • Marek  · 技术社区  · 15 年前

    我正在使用quartz.net来调度ASP.NET MVC应用程序中的常规事件。

    计划的作业应调用需要urlhelper实例的服务层脚本(用于根据正确的路由创建URL)( via urlHelper.Action(..) )包含在将由服务发送的电子邮件中)。

    我不想将链接硬编码到电子邮件中-它们应该使用urlhelper解决。

    工作:

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

    请注意,这不是在MVC管道中运行的。当前没有服务请求,代码由Quartz调度程序在指定的时间运行。

    如何获得在指定位置可用的urlhelper实例?

    如果不可能构建一个urlhelper,我看到的另一个选项是通过执行HTTP请求使作业“self call”成为控制器操作-在执行该操作时,我当然会有一个urlhelper实例可用-但在我看来这有点不正常。

    4 回复  |  直到 13 年前
        1
  •  5
  •   Community CDub    8 年前

    像这样为urlhelpler创建一个新的httpcontext怎么样 answer :

        2
  •  1
  •   Kelsey    15 年前

    编辑: 抱歉,我完全误读了我猜的问题。

    听起来你的调度器(我不知道它是如何工作的)是一个独立的过程,你想让urlhelper帮助你在MVC应用程序中生成有效的URL吗?

    您可以尝试在MVC应用程序中编写一个处理程序,该处理程序将在应用程序上下文中运行,该上下文将为您构建并返回URL。然后,您可以从调度程序调用该处理程序,根据传入的参数获取所需的任何URL。这样,调度程序只需要知道MVC应用程序的查询URL在哪里,然后就可以要求它为您进行URL映射。

    希望这是一个更好的答案。如果我完全离开,告诉我…我本来想删除我的回复,但我想再给它一次机会。

        3
  •  0
  •   Shelakel    13 年前

    在使用urlhelper.action方法时,请记住指定协议参数,这将 生成绝对URL . 例子:

    url.Action("Action", "Controller", null, "http")
    

    url.Action("Action", "Controller", null, request.Url.Scheme)
    
        4
  •  -2
  •   Gabe Moothart    15 年前

    你需要一个 RequestContext 创建一个urlhelper。在我的一个htmlhelper扩展方法中,我这样做:

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

    你如何得到 请求上下文 取决于您的申请。