Используйте средство чтения потоков, чтобы прочитать поток содержимого тела. Затем верните результат содержимого с помощью contentType: "application/json"
.
[HttpPost]
public ContentResult Index()
{
using (var reader = new StreamReader(Request.Body, Encoding.UTF8))
{
// Get the body (json) as a raw string
var originalTransaction = reader.ReadToEnd();
// Wrap the transaction
var id = Guid.NewGuid();
var envelope = $"{{ \"Id\": \"{id}\", \"OriginalTransactionData\": {originalTransaction} }}";
// return json
return Content(envelope, "application/json", Encoding.UTF8);
}
}
Помните, что в этом примере нет проверки для json. Если он неправильный (например, пропущена где-то запятая и т. Д.), Ответ также не будет действительным. Я рекомендую вам проверить, является ли необработанная строка originalTransaction
допустимым json, перед тем как обернуть ее в конверт.
Пример
Запрос
{ "Test": "Hello World" }
Ответ
{
"Id": "a9258e99-86cf-4f1d-9e17-0df7ba1dce5e",
"OriginalTransactionData": {
"Test": "Hello World"
}
}
Редактировать
Я немного испортил свой быстрый ответ. Вот пересмотренная версия. Я изменил, как прочитать запрос JSON и как отправить ответ JSON обратно. Эта версия должна работать сейчас. Также исправлена неправильная интерполяция строк и помещен идентификатор в экранированные кавычки. Добавил образец, который работал для меня.
Несмотря на потоковое считывание, я думаю, что теперь оно более прямолинейно.