Использование 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;

Нет больше «\», и ​​данные выглядят чистыми.

Другие вопросы по тегам