我有一个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。
答案 0 :(得分:0)
总有一个HttpContext。试试HttpContext.Current
静态方法。
答案 1 :(得分:0)
您可以捕获Application_Start方法中的url并将其存储在ApplicationState集合中。