How do I create a webapi method that takes in 2 doubles and a timespan as parameters?
我正在使用ASP WebAPI2.NET项目
我试图编写一个控制器,它以纬度、经度和时间跨度作为参数,然后返回一些JSON数据。(有点像商店定位器)
我有以下控制器代码
1 2 3 4 5 | public dynamic Get(decimal lat, decimal lon) { return new string[] { lat.ToString(), lon.ToString()}; } |
我在webapiconfig.cs类的顶部放了下面一行
1 2 3 4 | config.Routes.MapHttpRoute( name:"locationfinder", routeTemplate:"api/{controller}/{lat:decimal}/{lon:decimal}" ); |
当我执行以下调用时,会收到404错误。
1 | http://localhost:51590/api/MassTimes/0.11/0.22 |
我可以在查询字符串中使用小数吗?我该怎么解决这个问题?
很少的事情,
首先,在路线的末尾添加一个尾随斜杠。参数绑定无法确定小数的结尾,除非用尾随斜杠强制它。
其次,在您的路线声明上去掉类型:
1 2 3 4 | config.Routes.MapHttpRoute( name:"locationfinder", routeTemplate:"api/{controller}/{lat}/{lon}" ); |
第三,不要使用
您是否考虑过偶然地调查属性路由?URL包含了细节,但是,特别是在构建API时,属性路由确实简化了事情,并允许模式很容易地开发到您的路由中。
如果你最终走这条路线(ha),你可以这样做:
1 2 3 4 5 6 7 8 9 10 11 | [RoutePrefix("api/masstimes")] public class MassTimesController : ApiController { [HttpGet] [Route("{lat}/{lon}")] public ICollection<string> SomeMethod(double lat, double lon, [FromUri] TimeSpan time) { string[] mylist = { lat.ToString(), lon.ToString(), time.ToString() }; return new List<string>(myList); } } |
现在你可以打电话给
本文还介绍了您可能认为有用的其他可用选项(如