次のようなWebAPIサーバーリクエストを作成したいと思います。
localhost:8080/GetByCoordinates/[[100,90],[180,90],[180,50],[100,50]]
ご覧のとおり、座標の配列があります。各座標には2点ありますので、このようにお願いしたいと思います。Web Api Route Configがどのように表示され、メソッドシグネチャがどのように表示されるかがわかりません。
手伝ってもらえますか?ありがとう !
次のようなWebAPIサーバーリクエストを作成したいと思います。
localhost:8080/GetByCoordinates/[[100,90],[180,90],[180,50],[100,50]]
ご覧のとおり、座標の配列があります。各座標には2点ありますので、このようにお願いしたいと思います。Web Api Route Configがどのように表示され、メソッドシグネチャがどのように表示されるかがわかりません。
手伝ってもらえますか?ありがとう !
最も簡単な方法は、「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)
{
...
}
明らかな質問は、なぜその情報をURLに含めるのかということです。JSONとしてより適切に処理されるもののように見えます。
だからあなたはすることができますlocalhost:8080/GetByCoordinates/?jsonPayload={"coords": [[100,90],[180,90],[180,50],[100,50]]}