如何创建一个以2个双倍和一个时间跨度作为参数的webapi方法?

时间:2016-08-06 01:17:01

标签: c# asp.net asp.net-web-api asp.net-web-api2 asp.net-web-api-routing

我正在使用ASP Webapi2 .net项目

我正在尝试编写一个控制器,它接受纬度,经度和时间跨度作为参数 - 然后返回一些JSON数据。 (有点像商店定位器)

我有以下控制器代码

config.Routes.MapHttpRoute(
                name: "locationfinder",
                routeTemplate: "api/{controller}/{lat:decimal}/{lon:decimal}"
            );

我已将以下行放在我的WebAPIConfig.cs类的顶部

http://localhost:51590/api/MassTimes/0.11/0.22

当我执行以下调用时,出现404错误。

npm install karma-phantomjs-launcher --save-dev

我可以在查询字符串中使用小数吗?我怎么绕过这个?

2 个答案:

答案 0 :(得分:1)

您是否考虑过偶然调查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]和其他选项),您可能会觉得这些选项很有用。

答案 1 :(得分:1)

很少,

首先,在路径末尾添加一个尾部斜杠。参数绑定不能确定小数的结尾,除非用强制斜杠强制它。

http://localhost:62732/api/values/4.2/2.5/

其次,取消路线声明中的类型:

config.Routes.MapHttpRoute(
                name: "locationfinder",
                routeTemplate: "api/{controller}/{lat}/{lon}"
            );

第三,不要使用decimal。请改用double,因为它更适合描述纬度和经度坐标。