在global.asax中运行的Timer中生成客户端URL

时间:2010-10-28 17:28:57

标签: asp.net-mvc

我有一个MVC 2应用程序,它在Global.asax中的Application_Start期间启动了一个System.Timers.Timer对象。此计时器需要做的一件事是,当用户在其工作队列中有要审阅的项目时,会向用户生成每日电子邮件。电子邮件内部是指向要审核的项目的链接。

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

UriBuilder builder = new UriBuilder(Request.Url);
builder.Path = Url.RouteUrl("ReviewDetails", new { id = reviewId });
return builder.ToString();

我想在我的Timer的global.asax中使用的方法中做同样的事情,但是那时没有HttpContext,所以我无法以编程方式确定URL。

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

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

我把它放在云端,看看当HttpContext不可用时,是否有更好的解决方案以编程方式为客户端生成URL。

2 个答案:

答案 0 :(得分:0)

总有一个HttpContext。试试HttpContext.Current静态方法。

答案 1 :(得分:0)

您可以捕获Application_Start方法中的url并将其存储在ApplicationState集合中。