2013-02-13 52 views
5

我有一個mvc 3應用程序,後臺線程檢查某些數據庫項目的狀態。當它發現一個過期的項目時,它會發送一封電子郵件。在電子郵件中,我希望包含用於查看狀態的操作的URL。如果這是從控制器做我會用UrlHelper,如:在ASP.NET MVC中生成一個與控制器無關的URL 3

string body_url = "For more details see: " + Url.Action("Details", "MyOrder", new { OrderId = order.OrderId }, Constants.HttpProtocol); 

不過,我不是一個控制器,也不是我的方法從控制器調用時,它開始在應用程序啓動。有沒有辦法生成一個有效的UrlHelper,或者,如果沒有,生成一個有效的URL,而不訴諸硬編碼路徑,獨立於控制器?

回答

4

這是理論上的......裁判msdnso ...是在後臺線程使事情變得有趣:)

var request = new HttpRequest("/", "http://example.com", ""); //hopefully you can hardcode this or pull from config? 
var response = new HttpResponse(new StringWriter()); 
var httpContext = new HttpContext(request, response); 

var httpContextBase = new HttpContextWrapper(httpContext); 
var routeData = new RouteData(); 
var requestContext = new RequestContext(httpContextBase, routeData); 

var urlHelper = new UrlHelper(requestContext); 
var url = urlHelper.Action("ActionName", "ControllerName"); 
+0

這似乎是一個恥辱,有硬編碼的基本URL,尤其是考慮到它可以根據我是否正在運行測試或生產而改變。我本來希望有某種方法可以從應用中獲取基本網址。 – 2013-02-13 21:35:23

+0

當你旋轉它時,你可以將HttpContext.Current信息傳遞到你的後臺線程中。確保只使用它的基本URL部分! http://stackoverflow.com/questions/3398717/asp-net-get-websites-url-without-httpcontext-current-running-in-background-t – felickz 2013-02-13 22:07:11

+0

'HttpContext.Current'在應用程序啓動時不可用,它是@SimonParker希望能夠生成路由URL的時候。 – 2015-07-28 23:46:12

相關問題