我想使看起來像這樣一個Web API服務器的請求:傳遞二維數組的Web API服務器
localhost:8080/GetByCoordinates/[[100,90],[180,90],[180,50],[100,50]]
正如你所看到的,有座標的數組。每個座標都有兩點,我想提出這樣的要求。 我無法弄清楚我的Web Api路由配置應該如何,以及方法簽名應該如何。
你能幫忙嗎?謝謝 !
我想使看起來像這樣一個Web API服務器的請求:傳遞二維數組的Web API服務器
localhost:8080/GetByCoordinates/[[100,90],[180,90],[180,50],[100,50]]
正如你所看到的,有座標的數組。每個座標都有兩點,我想提出這樣的要求。 我無法弄清楚我的Web Api路由配置應該如何,以及方法簽名應該如何。
你能幫忙嗎?謝謝 !
最簡單的方法可能是使用「全部捕獲」路線並將其解析爲控制器操作。例如
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)
{
...
}
明顯的問題是,你爲什麼要這些信息是在網址是什麼?它看起來像JSON那樣處理得更好。
所以,你可以做localhost:8080/GetByCoordinates/?jsonPayload={"coords": [[100,90],[180,90],[180,50],[100,50]]}
你的URI是無效的,你需要傳遞的查詢字符串或身體 – 2013-03-19 10:28:19