TL & DR:
- Когда я выполняю интерполяцию строк ВНЕ FromSqlRaw, работает команда SQL.
- Когда я использую SQLRAW и передаю переменную в рамках функции. Это больше не работает, хотя в документации сказано, что должно.
Ниже приведен рабочий НЕПРАВИЛЬНЫЙ метод выполнения интерполяции строк.
[HttpGet("/home/dashboard/search")]
public async Task<ActionResult> dashboard_search([FromQuery] string search_string)
{
var query_string = $"select id, country_code, country_name, count(*) OVER() as total_count from ipaddresses where ipaddress::text LIKE '%{search_string}%' limit 8;";
var results = await this._context.getDashboardSearchIpAddresses.FromSqlRaw(query_string).ToListAsync();
return Ok(results);
}
Однако он уязвим для SQL инъекции. <- НЕ ДЕЛАЙТЕ ЭТОГО !!! </strong>
Документация Microsoft гласит следующее:
FromSqlInterpolated аналогичен FromSqlRaw, но позволяет использовать синтаксис интерполяции строк. Как и FromSqlRaw, FromSqlInterpolated можно использовать только для корней запросов. Как и в предыдущем примере, значение преобразуется в DbParameter и не подвержено SQL инъекции.
Когда я пытаюсь использовать FromSqlRaw, я получаю пустой набор результатов
[HttpGet("/home/dashboard/search")]
public async Task<ActionResult> dashboard_search([FromQuery] string search_string)
{
var results = await this._context.getDashboardSearchIpAddresses.FromSqlRaw("select id, country_code, country_name, count(*) OVER() as total_count from ipaddresses where ipaddress::text LIKE '%{0}%' limit 8;",search_string).ToListAsync();
return Ok(results); }
СМ. Ссылка: https://docs.microsoft.com/en-us/ef/core/querying/raw-sql