2013-03-19 56 views
3

我想使看起來像這樣一個Web API服務器的請求:傳遞二維數組的Web API服務器

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

正如你所看到的,有座標的數組。每個座標都有兩點,我想提出這樣的要求。 我無法弄清楚我的Web Api路由配置應該如何,以及方法簽名應該如何。

你能幫忙嗎?謝謝 !

+1

你的URI是無效的,你需要傳遞的查詢字符串或身體 – 2013-03-19 10:28:19

回答

1

最簡單的方法可能是使用「全部捕獲」路線並將其解析爲控制器操作。例如

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) 
{ 
    ... 
} 
0

明顯的問題是,你爲什麼要這些信息是在網址是什麼?它看起來像JSON那樣處理得更好。

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