如何创建一个将 2 个双精度数和一个时间跨度作为参数的 webapi 方法?
How do I create a webapi method that takes in 2 doubles and a timespan as parameters?
我正在使用 ASP Webapi2 .net 项目
我正在尝试编写一个控制器,它将纬度、经度和时间跨度作为参数 - 然后 returns 一些 JSON 数据。 (有点像商店定位器)
我有以下控制器代码
public dynamic Get(decimal lat, decimal lon)
{
return new string[] { lat.ToString(), lon.ToString()};
}
并且我已将以下行放在 WebAPIConfig.cs class
的顶部
config.Routes.MapHttpRoute(
name: "locationfinder",
routeTemplate: "api/{controller}/{lat:decimal}/{lon:decimal}"
);
当我执行以下调用时,出现 404 错误。
http://localhost:51590/api/MassTimes/0.11/0.22
我可以在查询字符串中使用小数吗?我该如何解决这个问题?
您是否考虑过偶然调查 Attribute Routing? URL 涵盖了细节,但是,特别是在构建 API 时,属性路由确实简化了事情,并允许将模式轻松开发到您的路由中。
如果你最终选择这条路线 (ha),你可以这样做:
[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]
和其他选项)。
几件事,
首先,在路线末尾添加一个斜杠。参数绑定无法确定小数点的结尾,除非您用尾部斜线强制它。
http://localhost:62732/api/values/4.2/2.5/
其次,取消路由声明中的类型:
config.Routes.MapHttpRoute(
name: "locationfinder",
routeTemplate: "api/{controller}/{lat}/{lon}"
);
第三,不要使用decimal
。请改用 double
,因为它更适合描述纬度和经度坐标。
我正在使用 ASP Webapi2 .net 项目
我正在尝试编写一个控制器,它将纬度、经度和时间跨度作为参数 - 然后 returns 一些 JSON 数据。 (有点像商店定位器)
我有以下控制器代码
public dynamic Get(decimal lat, decimal lon)
{
return new string[] { lat.ToString(), lon.ToString()};
}
并且我已将以下行放在 WebAPIConfig.cs class
的顶部config.Routes.MapHttpRoute(
name: "locationfinder",
routeTemplate: "api/{controller}/{lat:decimal}/{lon:decimal}"
);
当我执行以下调用时,出现 404 错误。
http://localhost:51590/api/MassTimes/0.11/0.22
我可以在查询字符串中使用小数吗?我该如何解决这个问题?
您是否考虑过偶然调查 Attribute Routing? URL 涵盖了细节,但是,特别是在构建 API 时,属性路由确实简化了事情,并允许将模式轻松开发到您的路由中。
如果你最终选择这条路线 (ha),你可以这样做:
[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]
和其他选项)。
几件事,
首先,在路线末尾添加一个斜杠。参数绑定无法确定小数点的结尾,除非您用尾部斜线强制它。
http://localhost:62732/api/values/4.2/2.5/
其次,取消路由声明中的类型:
config.Routes.MapHttpRoute(
name: "locationfinder",
routeTemplate: "api/{controller}/{lat}/{lon}"
);
第三,不要使用decimal
。请改用 double
,因为它更适合描述纬度和经度坐标。