API 按字符串获取

问题描述

当单词与表字段匹配时,我需要从 db 获取所有数据。 我试过在 http 方向使用参数 (GetRutaByText),像这样 .../api/ruta/GetRutaByText/'var'.../api/ruta/GetRutaByText/var 两者都返回空,不是错误,而是空。 我还尝试从正文发送“var”文本(GetRutaByText2)

相间


    Task<IEnumerable<Ruta>> GetRutasByText(string value);
    
    Task<IEnumerable<Ruta>> GetRutasByText2(Ruta ruta);

存储库:


    public async Task<IEnumerable<Ruta>> GetRutasByText(string value)
            {
                var db = dbConnection();
                var sql = @"select *
                            from public.tb_ruta
                            where descrip ilike '%@Value%'";
                return await db.QueryAsync<Ruta>(sql,new { Value = value });
    
            }
    
            public async Task<IEnumerable<Ruta>> GetRutasByText2(Ruta ruta)
            {
                var db = dbConnection();
                var sql = @"select *
                            from public.tb_ruta
                            where descrip ilike '%@descrip%'";
                return await db.QueryAsync<Ruta>(sql,new { ruta.descrip });
            }

控制器:


    [HttpGet("{value}")]
            public async Task<IActionResult> GetRutaByText(string value) 
            {
                return Ok(await _rutaRepository.GetRutasByText(value));
            }
    
            [HttpGet]
            public async Task<IActionResult> GetRutaByText2([FromBody] Ruta ruta) 
            {
                return Ok(await _rutaRepository.GetRutasByText2(ruta));
            }

这是邮递员测试的结果 1

2

3

解决方法

首先,您需要将 ilike 中的 like 更改为 sql。然后您需要调试并检查您的操作是否有价值。这里是一个演示以获得api 中的值。

控制器:

[Route("api/[controller]")]
    [ApiController]
    public class RutaController : ControllerBase
    {
        [HttpGet("GetRutaByText/{value}")]
        public async Task<IActionResult> GetRutaByText(string value)
        {
            return Ok(value);
        }

        

    }

结果: enter image description here

最后但并非最不重要的是,您需要清楚 like 的用法。

...descrip like var 表示描述需要为 var

...descrip like var% 表示描述以 var 开头。

...descrip like %var 表示描述以 var 结尾。

...descrip like %var% 表示描述在任何位置都有 var

所以也许你的数据库没有 Ruta 的描述是 var

更新:

尝试使用

return await db.QueryAsync<Ruta>("select * from public.tb_ruta where descrip ilike %"+value+"%");
,

Yiyi You 提出的解决方法:

用法如下:

public async Task<IEnumerable<Ruta>> GetRutasByText(string value)
        {
            var db = dbConnection();
            return await db.QueryAsync<Ruta>("select * from public.tb_ruta where descrip ilike '%" + value + "%'",new { Value = value });

        }

代替:

public async Task<IEnumerable<Ruta>> GetRutasByText(string value)
        {
            var db = dbConnection();
            var sql = @"select *
                        from public.tb_ruta
                        where descrip ilike '%@Value%'";
            return await db.QueryAsync<Ruta>(sql,new { Value = value });

        }