将二维数组传递给Web API服务器

时间:2013-03-19 10:23:46

标签: c# asp.net-mvc-4 web asp.net-web-api

我想制作一个如下所示的Web Api服务器请求:

localhost:8080/GetByCoordinates/[[100,90],[180,90],[180,50],[100,50]]

如您所见,有一系列坐标。每个坐标有两个点,我想提出这样的请求。 我无法弄清楚我的Web Api Route Config应该是什么样子,以及方法签名应该如何。

你帮帮忙吗?谢谢!

2 个答案:

答案 0 :(得分:1)

最简单的方法可能是使用'catch-all'路由并在控制器操作中解析它。例如

config.Routes.MapHttpRoute(
            name: "GetByCoordinatesRoute",
            routeTemplate: "/GetByCoordinatesRoute/{*coords}",
            defaults: new { controller = "MyController", action = "GetByCoordinatesRoute" }

public ActionResult GetByCoordinatesRoute(string coords)
{
    int[][] coordArray = RegEx.Matches("\[(\d+),(\d+)\]")
                              .Cast<Match>()
                              .Select(m => new int[] 
                                      {
                                          Convert.ToInt32(m.Groups[1].Value),
                                          Convert.ToInt32(m.Groups[2].Value)
                                      })
                              .ToArray();
}

注意:我的解析代码仅作为示例提供。你要求的东西要宽容得多,你可能需要为它添加更多的支票。

但是,更优雅的解决方案是使用自定义IModelBinder

public class CoordinateModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        int[][] result;
        // similar parsing code as above
        return result;
    }
}

public ActionResult GetByCoordinatesRoute([ModelBinder(typeof(CoordinateModelBinder))]int[][] coords)
{
    ...
}

答案 1 :(得分:0)

显而易见的问题是,为什么您希望该信息在URL中?它看起来像JSON更好地处理。

所以你可以做localhost:8080/GetByCoordinates/?jsonPayload={"coords": [[100,90],[180,90],[180,50],[100,50]]}