2017-05-26 2 views
1

Ich habe die folgende URLWeb API nicht get Parameter Parsen richtig

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 

Ich versuche, das Objekt abzufangen folgende Aktion mit

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; 
    } 

Und ich zurück

{ 
    "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 
} 

wie Sie sehen können, die Toleranz und Sr wurden richtig eingestellt, aber die Objekte waren nicht. Leider habe ich keine Kontrolle über die Anfrage (es ist immer ein GET und in diesem Format). Wie kann ich richtig die URL in die richtigen Objekte

Antwort

2

analysieren Da Sie 9 Abfrageparameter haben in Ihrem http GET, sollten Sie 9 Argumente in der Aktionsmethode deklarieren anstelle eines Wurzelobjekt dh:

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

[FromUri]RootObject root wird die Parameter nicht korrekt abbilden, da sie Abfrageparameter sind und kein POST Körper

+0

Ich versuchte dieses ursprünglich und es sagte 'kann nicht mehrere Parameter binden', die mich zu https://stackoverflow.com/questions/ brachte 38715230/webapi-selfhost-cant-bind-mehrere-Parameter-an-den-Anforderungen-Inhalt was gesagt wurde, um ein rootobject zu verwenden, aber dann wieder das war für einen Beitrag. ich try' nur versuchen, gerade jetzt haben [FromUri] Geometrie geometry' aber ich habe noch'Erhalte bin { "x": 0, "y": 0, "spatialReference": null } ' – CuriousDeveloper

Verwandte Themen