我在端点上遇到了问题,它需要一个未绑定的对象,因此返回了一个 400 错误请求。
我已经通过传入对象的各个属性而不是对象本身来解决此问题,但更喜欢传递对象。
WebClient webClient = new WebClient();
webClient.QueryString.Add("firstName", "value1");
webClient.QueryString.Add("lastName", "value2");
string result = webClient.DownloadString(url);
[HttpGet]
public async Task<IActionResult> DoSomething(string firstName, string lastName)
{
// this endpoint works perfectly
return Ok();
}
[HttpGet]
public async Task<IActionResult> DoSomething([FromBody]SubmitModel model)
{
// this endpoint returns a 400 bad request
return Ok();
}
public class SubmitModel
{
public string FirstName {get; set;}
public string LastName {get; set;
}
根据设计,GET
请求不包含请求正文中的数据。因此,当您的 Submit 方法收到请求时,它无法从正文绑定模型,因为数据不存在,因此返回错误的请求响应。
由于您的方法名为 Submit,因此听起来您应该改用POST
请求。 根据设计,POST
请求在请求正文中发送数据,并适合将数据提交到服务器。
像这样尝试
[HttpPost]
public async Task<IActionResult> Submit([FromBody]SubmitModel model)
{
// this endpoint returns a 400 bad request
return Ok();
}
是否有一种好方法可以做你想要的。为了更接近一点,您可以添加此属性以直接从 url 中提取
[HttpGet]
public ActionResult Get([FromUri]SubmitModel model)
{
// this endpoint returns a 400 bad request
return Ok();
}
如果需要,您可以做的另一件事是创建一个扩展方法,该方法反映在模型上并将所有属性/值添加到查询字符串中。这里有一些很好的例子 如何将对象序列化为查询字符串格式?