如何使用复杂对象进行GET请求?

时间:2018-05-07 13:21:45

标签: c# asp.net-core asp.net-core-webapi

我尝试使用复杂对象通过WebApi发出GET请求。 请求是这样的:

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

CustomObject的位置:

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

如何撰写有效的GET请求?

3 个答案:

答案 0 :(得分:3)

[FromBody] CustomObject[] obj ... GET请求没有邮件正文,因此您应将其更改为FromUri

当然,请看一下Documentation

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

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

请求如下所示,基本上您将整个对象数据作为查询字符串传递

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

可以在另一篇文章pass array of an object to webapi

中找到一个对象示例数组

答案 1 :(得分:2)

如果您的复杂对象是由服务器定义的,则可以通过URI对其进行建模绑定,并在路由模板中标记属性。我的建议是将这个模型保持在一个属性级别。您可以绑定到更复杂的对象,但您很快就会发现自己必须编写自己的模型绑定器。

请注意,您的参数装饰器需要更改为[FromUri]以通过Uri绑定复杂对象。服务器不需要支持GET主体,大多数不需要。

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

答案 2 :(得分:1)

您可以将其作为字符串化的json传递,或者通过post而不是get来使用请求体。