【问题标题】:API Get by stringAPI 字符串获取
【发布时间】:2021-05-03 23:43:20
【问题描述】:

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

相间


    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

【问题讨论】:

    标签: c# postgresql api get asp.net-core-mvc


    【解决方案1】:

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

    控制器:

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

    结果:

    最后但同样重要的是,您需要清楚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+"%");
    

    【讨论】:

    • 我使用 ilike 是因为我需要它来忽略大小写。我知道 like 和 % 的使用,而且我正在寻找的内容是正确的,它在任何位置都有 var,并且 Ruta 中有几个条目具有“var”。我会检查 [HttpGet("GetRutaByText/{value}")],我想我的错误可能在这里。谢谢
    • 刚刚检查过,不,它不工作,另外在你的例子中显示 200 OK,我的也是,只是没有带回任何值
    • 如果你尝试使用return await db.QueryAsync&lt;Ruta&gt;("select * from public.tb_ruta where descrip ilike %"+value+"%");,它可以工作吗?也许''在%@Value%之外会导致结果。
    • 嘿嘿,是的!对于两者,来自 body 和来自 uri
    【解决方案2】:

    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 });
    
            }
    

    【讨论】:

    • 如果我的回答有帮助,可以标记为回答吗?谢谢。
    猜你喜欢
    • 2020-11-10
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 2015-07-07
    • 2018-06-05
    • 2021-05-24
    相关资源
    最近更新 更多