2016-12-21 8 views
0

は、私は2つのパラメータでアクションを作成しようとしている、1は私がASP.NET WEBAPIルートパラメータ

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

にしようとしている。しかし、それは働いていない オプションです。 は「dateMax」は、オプションのパラメータであり、それは与えられていないときdateMin が既に

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

てみました。しかし、それはどちらか働いていないとして、それは同じ値でなければなりません。 私はそれを行うために他の可能性がある

{dateMin}/{dateMax} 

のようなものを持っていけませんか?

答えて

1

のようでなければならないことやるべきことクエリ文字列の表記(&

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

あなたはRoutAttribute

+0

を使用している場合、ルートの設定を変更する必要はありませんがありがとうございました:)また、私は2番目の質問があります。 私は "movies/2/xx"で動作させたいと思います - movieId = 2の場合のみxxを取得します と "movies/xx" - すべてのxxを取得する 可能性はありますか? – Pawel

+0

@Pawel - no。位置パラメータを使用する場合、順序は重要であり、必要なパラメータの前にオプションのパラメータを配置する必要があります。あなたの最善の策は代わりにクエリ文字列を使用し、それらを位置ベースにするのではなく名前でバインドすることです。これを行うには、ルートテンプレートからそれらを完全に省略して、メソッドにパラメータとして保持して、それらをnullableにします(値タイプに?を追加)し、デフォルト値を割り当てます。次に、これらはオプションで、クエリ文字列パラメータを使用して値を含めることができます。 – Igor

+0

さて、ありがとうございます:) – Pawel

1

あなたRouteConfig.csに

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

あなたのルートは、あなたがスラッシュを使用して、ルート内のルートのパラメータを分離する必要があり、使用していない。この

"{controller}/{action}/{dateMin}/{dateMax}" 
関連する問題