2013-05-13 13 views
13

Esiste un modo per ottenere staticamente i valori del percorso da un metodo di servizio (esterno a un controller) in esecuzione in un contesto API Web? Ad esempio, posso effettuare le seguenti operazioni in ASP.NET MVC:L'API Web ottiene i valori del percorso

var mvcHandler = HttpContext.Current.Handler as MvcHandler; 
var routeValues = mvcHandler.RequestContext.RouteData.Values; 

mi piacerebbe trovare la versione equivalente di questo codice per l'API Web.

Quando si tenta di eseguire il debug di una richiesta API Web di esempio e di guardare HttpContext.Current.Handler è di tipo HttpControllerHandler, ma questo tipo non ha proprietà per accedere ai dati del percorso.

EDIT

Per cercare di contribuire a fornire qualche informazione in più. Il codice che sto cercando di leggere il valore è all'interno di una classe factory che ho creato un oggetto personalizzato per la mia applicazione.

+0

Kyle, potresti pubblicare la versione del codice Web API per noi? –

+0

Questo è quello che sto cercando di capire :) – Kyle

+0

Vuoi dire che stai usando System.Web.Http; var handler = Http.Current.Handler 'e l'ho trovato come HttpControllerHandler? –

risposta

10

Sono riuscito a trovare una soluzione che avrebbe ottenuto i valori del percorso per una richiesta MVC o una richiesta API Web.

HttpContext.Current.Request.RequestContext.RouteData 
18

È possibile utilizzare l'estensione GetRouteData() su HttpRequestMessage. Dovresti includere lo spazio dei nomi System.Net.Http per ottenere questo.

System.Web.Http.Routing.IHttpRouteData routeData = Request.GetRouteData(); 
+0

Grazie. Sembra che funzioni in un controller, ma al di fuori di un controller HttpContext.Current.Request non è di tipo HttpRequestMessage (e non può essere lanciato su di esso). Avrei dovuto chiarirlo meglio nel PO. – Kyle

+0

No, si sarà in grado di accedervi ovunque sia possibile accedere a HttpRequestMessage. Esempio all'interno gestore di messaggi: 'class DelegateHandlerA pubblico: DelegatingHandler {protected override asincrona Task SendAsync (HttpRequestMessage richiesta, CancellationToken CancellationToken) { System.Web.Http.Routing.IHttpRouteData RouteData = request.GetRouteData(); HttpResponseMessage response = attende base.SendAsync (request, cancellationToken); risposta di risposta; } } ' –

+0

L'estensione BTW, GetRouteData() fornisce un'esperienza coerente tra gli scenari WebHost (IIS) e SelfHost (dove HttpContext non è disponibile). –

Problemi correlati