2016-12-21 96 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}"