2015-10-07 19 views
6

Chcę dostać metody na moim api, jeden z trasą o parametrach Ścieżka:Jak odróżnić parametry zapytań od ścieżki Parametry

API/ludzie/{PersonID}

i jeden z trasą z parametrami zapytania:

API/osób tekstu = coś

ale jeśli mogę umieścić ten kod:

// GET: api/people/{personId} 
[Route("api/people/{personId}")] 
[HttpGet] 
public HttpResponseMessage Get(long personId) 
{ 
} 

// GET: api/people?text=something 
[Route("api/people")] 
[HttpGet] 
public HttpResponseMessage Get(string text) 
{ 
} 

a następnie spróbuj otworzyć /api/ludzie/1 mówi niewłaściwy format i gdy próbuję otworzyć /API/osób text = coś prawda? Prace.

Mam trasa domyślna zdefiniowana tylko:

config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
    ); 

Jak mogę mieć je oba działa? Zdefiniować, że jeśli jest to parametr ścieżki, przejdź do pierwszego i jeśli jest to parametr zapytania, przejdź do drugiego na?

+0

Co stanie się po zmianie 'long' na' int'? (Z ciekawości). Dobre pytanie. Nie jestem pewien na odpowiedź (jeszcze). Nie sądziłem, że będziesz miał problemy z przeglądaniem tego kodu. –

+0

Przetestowałem ten dokładny scenariusz z Web API 2.2 i to działa. Myślę, że używasz starej wersji Web API. –

+0

@JayMee 'long' lub' int' wynik jest taki sam –

Odpowiedz

4

Po prostu umieść to w Visual Studio 2015 przy użyciu Web API 2 i działa dobrze. Musiałem dodać następujące linie (po jednej dla każdej metody kontrolera).

return Request.CreateResponse(HttpStatusCode.OK); 

Wyrzuciłem również domyślną konfigurację trasy. Następujące adresy URL działać dobrze

http://localhost:64377/api/people/1

http://localhost:64377/api/people?text=Hello

uderzę zarówno odpowiednie metody w moim kontroler kiedy umieścić te adresy URL w IE.

+0

To działało, myślę, że problem był domyślną konfiguracją trasy, dzięki mate! ;) –

+0

Bez problemu. Twoje zdrowie! –