Использование FromSqlRaw для получения данных из процедуры SQL с помощью HttpPost. Невозможно вернуть строковый вывод
Код контроллера:
public async Task<ActionResult<IEnumerable<OutputString>>> Getoutput(AccountByCustomer input)
{
string StoredProc = "exec dbo.Get_ACCOUNT_Data_To_API " +
"@CustomerNumber = '" + input.CustomerNumber + "'" + "," +
"@RequestClass = '" + input.RequestClass + "'" + "," +
"@EmailAddress = '" + input.EmailAddress + "'" + "," +
"@TransactionId = '" + input.TransactionId + "'";
return await _context.OutputString.FromSqlRaw(StoredProc).ToListAsync();
}
Это возвращает:
Я пытаюсь вернуться:
{
"Account": [
{
"Token": "8026F271-34FB-47F9-A465-83E9B0EF99FD",
"CustomerNo": "...
(I need to keep this string short as it contains customer data...)
......
}
]
}
Я пробовал разные способы, конвертировать в строку, десериализовать, JsonResult - абсолютно НЕТ успеха.
В Stackoverflow есть много примеров, но я не могу заставить их работать.
Я предполагаю, что мне нужно преобразовать "outMsg", который представляет собой список, в строку.
var x = await _context.OutputString.FromSqlRaw(StoredProc).ToListAsync();
вернуть Convert.ToString(x);
но это никогда не работало.
Json.Deserialize(x)
или любые его варианты также потерпели неудачу.
Я также попытался передать выходной параметр процедуре.
Использование .net 7.0
2 ответа
Похоже, вы не создали средство сопоставления объектов для своей процедуры хранения, возвращающей результат.
Создайте соответствующий сопоставитель объектов и преобразуйте результат процедуры хранения в ToListAsync, после чего вы сможете правильно сериализовать и десериализовать данные JSON через HttPost.
var blogs = _context.OutputString.FromSql($"EXECUTE dbo.zzz_Get_ACCOUNT_Data_To_API_NO_PARA {user}").AsEnumerable();
ключ был: .AsEnumerable() - он позволял .FirstOrDefault возвращать данные.
var myString = blogs.FirstOrDefault().Value;
Нет больше «\», и данные выглядят чистыми.