【问题标题】:Consume restful API get method with content(body) or more than one parameter使用带有 content(body) 或多个参数的 restful API get 方法
【发布时间】:2021-05-06 23:03:38
【问题描述】:

这是我的 API 方法,它需要来自 body 的 3 个参数


    public async Task<IEnumerable<EnCurso>> GetIdCondByDTRuta(EnCurso encurso)
            {
                var db = dbConnection();
                return await db.QueryAsync<EnCurso>("select * from public.tb_encurso where to_timestamp('" + encurso.inicio+ "','DD/MM/YYYY HH24:MI:SS') between inicio AND fin and idruta = " + encurso.idruta+ " and idbus = "+ encurso.idbus + " and estado=true;", new { encurso.inicio, encurso.idruta, encurso.idbus });
            }

    [HttpGet("GetIdCondByDTRuta")]
            public async Task<IActionResult> GetIdCondByDTRuta([FromBody] EnCurso encurso)
            {
                return Ok(await _encursoRepository.GetIdCondByDTRuta(encurso));
            }

从身体对 Postman 进行测试时效果很好。

但是我不知道如何从使用 API 的应用发送内容。 我尝试在 URI 中添加参数,像这样


    var _URI = "http://XXX.XXX.0.XX:4XXX8/api/encurso/GetIdCondByDTRuta.json?inicio:" + encurso.inicio + "&idruta:" + encurso.idruta + "&idbus:" + encurso.idbus;
                HttpResponseMessage result = await client.GetAsync(_URI);

不起作用。我尝试像帖子一样搜索采用 Uri 和内容的 httpclient 方法,但 GET 方法没有选项

【问题讨论】:

  • GET 方法不应接受正文参数。修改服务器方法以接受可以在查询字符串上传递的三个不同参数会更有意义。

标签: c# asp.net rest xamarin.forms getasync


【解决方案1】:

HTTP Get 方法不应包含此线程中引用的主体:HTTP GET with request body

在创建 Get API 方法时,最好使用 [FromQuery]-FromQueryAttribute Class 这会将数据绑定到原始类型。因此,您将需要 3 个单独的参数。如果要绑定到对象,则需要创建自定义 ModelBinder。

这个来自 Microsoft 的文档在您尝试在 ASP.Net core/5 API Binding source parameter inference 中绑定数据时介绍了您的选项

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 2021-11-23
    • 2013-11-22
    • 2016-09-05
    • 2015-04-19
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    相关资源
    最近更新 更多