How to make GET request with a complex object?

若如初见. 提交于 2020-01-25 03:50:31

问题


I try to make GET request via WebApi with complex object. Request is like this:

[HttpGet("{param1}/{param2}")]
public async Task<IActionResult> GetRequest(string param1, int param2, [FromBody] CustomObject[] obj)
{
    throw new NotImplementException();
}

Where CustomObject is:

[DataContract]
public class CustomeObject
{        
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public string Email { get; set; }
}

How do I compose a valid GET request?


回答1:


[FromBody] CustomObject[] obj ... GET request has no message body and thus you should change it to FromUri.

Sure, take a look at Documentation

public class GeoPoint
{
    public double Latitude { get; set; } 
    public double Longitude { get; set; }
}

public ValuesController : ApiController
{
    public HttpResponseMessage Get([FromUri] GeoPoint location) { ... }
}

Request would be like below, essentially you pass the entire object data as query string

http://localhost/api/values/?Latitude=47.678558&Longitude=-122.130989

An array of object example can be found in another post pass array of an object to webapi




回答2:


If your complex object is defined by the server, you can model bind to it through the URI and dot notate the properties in the routing template. My advice is to keep this model to one level of properties. You can bind to more complex objects, but you'll quickly find yourself having to write your own model binder.

Note that your argument decorator will need to be changed to [FromUri] to bind a complex object through the Uri. Servers are not required to support GET bodies and most do not.

public class CustomObject
{ 
    public string Name { get; set; }
    public string Email { get; set; }
}

[HttpGet]
[Route("{foo.Name}/{foo.Email}")]
public HttpResponseMessage Get([FromUri]CustomObject foo)
{
   //...body
  return Request.CreateResponse(HttpStatus.OK, foo);
} 



回答3:


You can pass it as a stringified json or use the request body via post instead of get.



来源:https://stackoverflow.com/questions/50215288/how-to-make-get-request-with-a-complex-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!