2013-02-13 30 views
5

'da denetleyicilerin bir URL'sini bağımsız olarak oluşturma Bazı veritabanı öğelerinin durumunu denetleyen bir arka plan iş parçacığı olan bir mvc 3 uygulamasına sahibim. Süresi dolmuş bir öğe bulduğunda, bir e-posta gönderir. E-postada, durumu görmek için eylem çağrısının URL'sini eklemek istiyorum. Bu bir kumandadan gelen yapıldığını ben mesela UrlHelper, kullanırsınız:ASP.NET MVC 3

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

Ancak, ben bir denetleyici değilim, ne de bir denetleyici aradı benim yöntem, bu uygulama başlangıcında başlayan edilir. Geçerli bir UrlHelper oluşturmak için bir yol var mı, yoksa, eğer, denetleyiciden bağımsız olarak, sabit kodlama yollarına başvurmadan geçerli bir URL oluşturmak için mi?

cevap

4

Bu teorik ... ref msdn ve so olduğunu ... bir arka plan iş parçacığı üzerinde olmak ilginç şeyler :)

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

Özellikle vermiş, sert koduna taban URL olması utanç verici görünüyor yapar test veya üretim yaptığımdan bağımsız olarak değişebilir. Uygulamanın temel URL'sini yakalamanın bir yolu olacağını umuyordum. –

+0

HttpContext.Current bilgilerini döndürdüğünüzde arka plan iş parçacığınıza geçirebilirsiniz. Sadece temel url bölümünü kullandığınızdan emin olun! http://stackoverflow.com/questions/3398717/asp-net-get-websites-url-without-httpcontext-current-running-in-background-t – felickz

+0

'HttpContext.Current' uygulama başlangıcında mevcut değildir. @SimonParker bir rota URL'si oluşturabilmek istiyorsa. –