1

I have the following url

    http://localhost/api/map/tmc/identify?
    geometry={x:-112.0469856262207,y:33.3926093953406, spatialReference:{wkid:4326}}
    &geometryType=esriGeometryPoint
    &mapExtent={xmin:-112.18062400817871,ymin:33.33956359362892,xmax:-111.95076942443848,ymax:33.49201883920683, spatialReference:{wkid:4326}}
    &tolerance=5
    &sr=4326
    &imageDisplay=1340,1065,96
    &layers=all:0
    &returnGeometry=true
    &returnM=false

I am trying to intercept that object using the following action

    public class SpatialReference
    {
        public int wkid { get; set; }
    }

    public class Geometry
    {
        public double x { get; set; }
        public double y { get; set; }
        public SpatialReference spatialReference { get; set; }
    }

    public class MapExtent
    {
        public double xmin { get; set; }
        public double ymin { get; set; }
        public double xmax { get; set; }
        public double ymax { get; set; }
        public SpatialReference spatialReference { get; set; }
    }

    public class RootObject
    {
        public Geometry geometry { get; set; }
        public string geometryType { get; set; }
        public MapExtent mapExtent { get; set; }
        public int tolerance { get; set; }
        public int sr { get; set; }
        public List<int> imageDisplay { get; set; }
        public string layers { get; set; }
        public bool returnGeometry { get; set; }
        public bool returnM { get; set; }
    }

    [HttpGet]
    [Route("api/map/tmc/identify")]
    public object Identify([FromUri]RootObject root)
    {
        return root;
    }

And I get back

{  
   "geometry":{  
      "x":0.0,
      "y":0.0,
      "spatialReference":null
   },
   "geometryType":"esriGeometryPoint",
   "mapExtent":{  
      "xmin":0.0,
      "ymin":0.0,
      "xmax":0.0,
      "ymax":0.0,
      "spatialReference":null
   },
   "tolerance":5,
   "sr":4326,
   "imageDisplay":[  
      0
   ],
   "layers":"all:0",
   "returnGeometry":true,
   "returnM":false
}

as you can see the tolerance and sr were set correctly but the objects were not. Unfortunately I have no control over the request (It's always a GET and in this format). How can I correctly parse the url into the right objects

1 Answer 1

2

Since you have 9 query parameters in your http GET, you should declare 9 arguments in the action method instead of a root object i.e:

[HttpGet]
[Route("api/map/tmc/identify")]
public object Identify([FromUri]Geometry geometry, 
    [FromUri]string geometryType, 
    [FromUri] MapExtent mapExtent,
    ...)

[FromUri]RootObject root will not map the parameters correctly since they are query parameters and not a POST body

Sign up to request clarification or add additional context in comments.

1 Comment

I tried this originally and it said Can't bind multiple parameters which brought me to stackoverflow.com/questions/38715230/… which said to use a rootobject but then again that was for a post. I did just now try just try[FromUri] Geometry geometry but I am still getting { "x": 0, "y": 0, "spatialReference": null }

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.