【问题标题】:How to pass object to Web API as Parameter with HttpGet如何使用 HttpGet 将对象作为参数传递给 Web API
【发布时间】:2022-11-07 17:45:42
【问题描述】:

我正在开发 .NET 6.0 Web API 应用程序。我需要将作为字符串列表集合的对象传递给 API,目的是返回数据。我可以使用HttpPost,但由于我设计此 API 的目的是为Get 记录,那么正确的方法是什么?

public class JobRoleDataView
{
    public JobRoleDataView() { }

    public List<string> Roles { get; set; }
}

该对象将很快获得更多属性,因此它不仅仅是列表...

[HttpGet("SearchRecord")]
public async Task<IActionResult> SearchRecord(JobRoleDataView JobRoles)
{
  //remaining code

  return Ok(returnResponse);
}

error

   TypeError: Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body.

【问题讨论】:

  • 我想说,您想违反 HTTP 原则,但恕我直言,唯一的解决方法是 cookie 存储。
  • 只要该方法不会修改底层存储系统中的任何数据,我认为使用 HTTP GET 没有问题。我正在假设您传递的数据出于某种原因需要生成响应,但实际上不会用于更改数据库(或类似系统)中的任何数据。你能澄清为什么你认为这会是一个问题吗?
  • 我收到错误类型错误:无法在“窗口”上执行“获取”:使用 GET/HEAD 方法的请求不能有正文。
  • 您可以通过将分隔列表作为参数传递给 API 并使用将输入解析为列表的自定义 ModelBinder 来做您想做的事情: public async Task<IActionResult> SearchRecord( [ModelBinder(typeof(MyCustomDelimitedModelBinder))] List<string > 角色)

标签: c# .net-6.0 webapi http-get


【解决方案1】:

您可以使用 [FromQuery] 属性并将角色作为查询字符串传递。

 [HttpGet("SearchRecord")]
public async Task<IActionResult> SearchRecord([FromQuery]JobRoleDataView JobRoles)
{
  //remaining code

  return Ok(returnResponse);
}
}

请求 url 将如下所示。 https://localhost:7009/WeatherForecast/SearchRecord?Roles=vishal&Roles=michel

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多