3

次のようなWebAPIサーバーリクエストを作成したいと思います。

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

ご覧のとおり、座標の配列があります。各座標には2点ありますので、このようにお願いしたいと思います。Web Api Route Configがどのように表示され、メソッドシグネチャがどのように表示されるかがわかりません。

手伝ってもらえますか?ありがとう !

4

2 に答える 2

1

最も簡単な方法は、「c​​atch-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)
{
    ...
}
于 2013-03-19T10:28:58.707 に答える
0

明らかな質問は、なぜその情報をURLに含めるのかということです。JSONとしてより適切に処理されるもののように見えます。

だからあなたはすることができますlocalhost:8080/GetByCoordinates/?jsonPayload={"coords": [[100,90],[180,90],[180,50],[100,50]]}

于 2013-03-19T11:09:30.573 に答える