2016-12-21 10 views
0

Ich versuche, eine Aktion mit 2 Parametern zu machen, ist ein optional Ich bin mitASP.NET WebAPI Routenparameter

[HttpGet, Route("movies/date/{dateMin}&{dateMax}")] 

versucht, aber es funktioniert nicht. ‚dateMax‘ ist ein optionaler Parameter, und wenn es nicht gegeben hat sollte es den gleichen Wert wie dateMin bereits versucht, mit

[HttpGet, Route("movies/date/{dateMin}&{dateMax?}")] 

Aber es ist auch nicht arbeiten. Ich mag nicht

so etwas wie
{dateMin}/{dateMax} 

Gibt es andere Möglichkeit, das zu tun haben?

Antwort

1

Sie müssen sein, um die Routenparameter in Ihrer Route entmischen mit einem Schrägstrich und nicht mit die Abfragezeichenfolgennotation (&).

[HttpGet, Route("movies/date/{dateMin}/{dateMax?}")] 
public IHttpActionResult MoviesDate(DateTime dateMin, DateTime? dateMax){ 
} 

Es gibt keine Notwendigkeit, die Route Config zu ändern, wenn Sie RoutAttribute

+0

Sie verwenden vielen Dank :) Ich habe auch eine zweite Frage. Ich habe "[HttpGet, Route (" Filme/{movieId: int?}/Xx ")]" Ich möchte es mit "Filme/2/xx" arbeiten - bekommen xx nur für MovieId = 2 und "movies/xx" - alles bekommen xx Gibt es eine Möglichkeit, das zu tun? – Pawel

+0

@Pawel - nein. Wenn Sie Positionsparameter verwenden, ist die Reihenfolge kritisch und optionale Parameter sollten vor den erforderlichen Parametern platziert werden. Am besten wäre es, stattdessen eine Abfragezeichenfolge zu verwenden und sie nach Namen zu binden, anstatt sie positionsbasiert zu machen. Um dies vollständig aus der Routenvorlage auszulassen, behalten Sie sie als Parameter in der Methode bei, sodass sie nullwertfähig sind (Hinzufügen von Werttypen) und einen Standardwert zugewiesen wird. Dann sind sie optional und Sie können einen Abfragezeichenfolgenparameter verwenden, um einen Wert aufzunehmen. – Igor

+0

Okay, vielen Dank :) – Pawel

1

sollten Sie, dass in Ihrem RouteConfig.cs tun

routes.MapRoute(
     name: "Movies", 
     url: "{controller}/{action}/{dateMin}/{dateMax}", 
     defaults: new { controller = "movies", action = "date", dateMax= UrlParameter.Optional } 
     ); 

der Route sollte wie dieses

"{controller}/{action}/{dateMin}/{dateMax}"