2016-12-21 93 views
0

我嘗試拍動作有兩個參數,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

非常感謝你:)另外,我有一個第二個問題。 我有 「[HttpGet,Route(」movies/{movieId:int?}/xx「)]」 我想讓它與 「movies/2/xx」一起使用 - 只爲movieId = 2獲得xx 和「電影/ xx」 - 全部獲得xx 有沒有可能這樣做? – Pawel

+0

@Pawel - no。如果使用位置參數,則順序非常重要,可選參數應放置在所需參數之前。你最好的選擇是使用查詢字符串,並通過名稱來綁定它們,而不是使它們成爲基於位置的。爲了完成從路徑模板中完全省略它們,將它們作爲參數保存在使它們可爲空的方法中(爲值類型添加?)並指定默認值。然後它們是可選的,您可以使用查詢字符串參數來包含值。 – 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}"