2010-10-28 51 views
0

我有一個MVC 2應用程序,它在Global.asax的Application_Start期間啓動了一個System.Timers.Timer對象。計時器需要做的其中一件事就是當用戶在工作隊列中查看項目時,爲用戶生成每日電子郵件。在電子郵件裏面有一個鏈接返回到要查看的項目。在運行global.asax的Timer中生成客戶端URL

在我已經在不同的控制器操作運行的代碼,我用這樣的代碼來生成可通過電子郵件發送給用戶的URL:

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

我願做我的定時器的經過法中的一樣在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

您可以在Application_Start方法中捕獲url並將其存儲在ApplicationState集合中。

+0

是的,完美的作品。 \t \t保護無效的Application_Start() \t \t { \t \t \t _siteUri = HttpContext.Current.Request.Url; \t \t} – 2010-10-28 17:58:23

+0

您應該可以在沒有HttpContext.Current部分的情況下訪問。請求對象可以在Application_Start中直接訪問 – Sruly 2010-10-28 19:31:43

0

總是有一個HttpContext。嘗試使用HttpContext.Current靜態方法。