我尝试使用复杂对象通过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请求?
答案 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
中找到一个对象示例数组
答案 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来使用请求体。