API 按字符串获取
API Get by string
我需要在单词匹配 table 字段时从数据库中获取所有数据。
我试过在 http 方向(GetRutaByText)使用参数,就像这样
.../api/ruta/GetRutaByText/'var'
和
.../api/ruta/GetRutaByText/var
return 都是空的,不是错误,而是空的。
我还尝试从正文 (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
首先,您需要将 sql
中的 ilike
更改为 like
。然后您需要调试并检查您是否在 action.Here 中获得值在 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+"%");
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 });
}
我需要在单词匹配 table 字段时从数据库中获取所有数据。
我试过在 http 方向(GetRutaByText)使用参数,就像这样
.../api/ruta/GetRutaByText/'var'
和
.../api/ruta/GetRutaByText/var
return 都是空的,不是错误,而是空的。
我还尝试从正文 (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
首先,您需要将 sql
中的 ilike
更改为 like
。然后您需要调试并检查您是否在 action.Here 中获得值在 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+"%");
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 });
}