Asp.net mvc 在global.asax中运行的计时器中生成客户端URL

Asp.net mvc 在global.asax中运行的计时器中生成客户端URL,asp.net-mvc,Asp.net Mvc,我有一个MVC 2应用程序,它有一个System.Timers.Timer对象,在global.asax的应用程序启动期间启动。该计时器需要做的一件事是,当用户的工作队列中有项目要查看时,每天生成一封电子邮件给用户。电子邮件中有一个指向要查看的项目的链接 在我在各种控制器操作中运行的代码中,我使用如下代码生成可以通过电子邮件发送给用户的URL: UriBuilder builder = new UriBuilder(Request.Url); builder.Path = Url.RouteUr

我有一个MVC 2应用程序,它有一个System.Timers.Timer对象,在global.asax的应用程序启动期间启动。该计时器需要做的一件事是,当用户的工作队列中有项目要查看时,每天生成一封电子邮件给用户。电子邮件中有一个指向要查看的项目的链接

在我在各种控制器操作中运行的代码中,我使用如下代码生成可以通过电子邮件发送给用户的URL:

UriBuilder builder = new UriBuilder(Request.Url);
builder.Path = Url.RouteUrl("ReviewDetails", new { id = reviewId });
return builder.ToString();
我想在global.asax中的计时器的appeased方法中执行相同的操作,但此时没有HttpContext,因此无法通过编程确定URL

我认为唯一的解决方案是将站点的根目录(例如:)存储在web.config中,然后使用它来构建URL,如下所示:

string url = string.Concat(ConfigurationManager.AppSettings["SiteRoot"], "/Review/", reviewId.ToString());

我把这个放到云中,看看是否有更好的解决方案,可以在HttpContext不可用时,通过编程为客户端生成URL。

总会有HttpContext。尝试HttpContext.Current静态方法。

您可以在应用程序启动方法中捕获url,并将其存储在ApplicationState集合中。

是的,非常有效。受保护的无效应用程序_Start(){u siteUri=HttpContext.Current.Request.Url;}您应该能够在没有HttpContext.Current部分的情况下访问。请求对象可以在应用程序_Start中直接访问