2013-02-13 11 views
5

Ho un'applicazione mvc 3 con un thread in background che controlla lo stato di alcuni elementi del database. Quando trova un oggetto scaduto, invia un'email. Nell'email, vorrei includere l'url per l'azione da chiamare per vedere lo stato. Se questo è stato fatto da un controller Vorrei utilizzare l'UrlHelper, ad esempio:Generazione di un URL indipendente dai controller in ASP.NET MVC 3

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

Tuttavia, io non sono in un controllore, non è il mio metodo chiamato da un controller, viene avviato all'avvio dell'applicazione. C'è un modo per generare un UrlHelper valido o, in caso contrario, per generare un URL valido senza ricorrere a percorsi hard-coding, quando indipendente dai controller?

risposta

4

Questa è teorico ... Rif msdn e so ... essere su un thread in background rende le cose interessanti :)

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

sembra un peccato dover codificare l'URL di base, in particolare dato può cambiare a seconda che io stia eseguendo test o produzione. Avrei sperato che ci fosse un modo per afferrare l'URL di base dall'app. –

+0

Puoi passare le informazioni HttpContext.Current nel tuo thread in background quando lo fai ruotare .. assicurati di usare solo la parte di url di base! http://stackoverflow.com/questions/3398717/asp-net-get-websites-url-without-httpcontext-current-running-in-background-t – felickz

+0

'HttpContext.Current' non è disponibile all'avvio dell'applicazione, che è quando @SimonParker vuole essere in grado di generare un URL del percorso. –