如何创建一个以2个doubles和一个时间跨度作为参数的webapi方法
本文关键字:时间跨度 一个 参数 webapi 方法 创建 何创建 一个以 2个 doubles | 更新日期: 2023-09-27 18:01:01
我使用的是ASP Webapi2.net项目
我正在尝试编写一个控制器,它将纬度、经度和时间跨度作为参数,然后返回一些JSON数据。(有点像商店定位器(
我有以下控制器代码
public dynamic Get(decimal lat, decimal lon)
{
return new string[] { lat.ToString(), lon.ToString()};
}
我在WebAPIConfig.cs类的顶部放了下面一行
config.Routes.MapHttpRoute(
name: "locationfinder",
routeTemplate: "api/{controller}/{lat:decimal}/{lon:decimal}"
);
当我进行以下调用时,我得到一个404错误。
http://localhost:51590/api/MassTimes/0.11/0.22
我可以在查询字符串中使用小数吗?我该怎么解决这个问题?
很少有东西,
首先,在路线的末尾添加一个斜线。参数绑定无法确定小数的末尾,除非强制使用尾部斜杠。
http://localhost:62732/api/values/4.2/2.5/
第二,去掉路线申报上的类型:
config.Routes.MapHttpRoute(
name: "locationfinder",
routeTemplate: "api/{controller}/{lat}/{lon}"
);
第三,不要使用decimal
。请改用double
,因为它更适合描述纬度和经度坐标。
您是否考虑过偶然地研究属性路由?URL涵盖了细节,但当涉及到构建API时,属性路由确实简化了事情,并允许模式轻松地开发到您的路由中。
如果你最终走上了这条路线(哈(,你可以做这样的事情:
[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);
}
}
您现在可以拨打GET http://www.example.net/api/masstimes/0.00/0.00?time=00:01:10
本文还介绍了您可能会发现有用的其他可用选项(例如[FromBody]
和其他选项(。