Как и этот старый вопрос о предыдущих версиях ASP.NET, я хочу, чтобы тело запроса HTTP POST было привязано к строке. Кажется, что метод связывается, но value
имеет значение null, когда ASP.NET вызывает мой метод контроллера:
namespace Demo.Controllers
{
[Route("[controller]")]
public class WebApiDemoController : Controller
{
...
// POST api/values
[HttpPost]
public System.Net.Http.HttpResponseMessage Post([FromBody]string value)
{
// expected: value = json string, actual: json = null.
}
Должен ли я все-таки ухватиться за тело из потока? Или это просто работает? При тестировании вышеописанного метода я использовал следующие заголовки http:
Accept: Application/json
Content-Type: Application/json;charset=UTF-8
Я передаю следующее в теле: { "a": 1 }
Я НЕ хочу привязываться к строковой переменной с именем a. Я хочу связать любой JSON, который я получаю, а затем я хочу использовать контент JSON, любой произвольный контент, из моего метода.
Если я понял документацию, атрибут [FromBody]
должен был сделать то, что я хотел, но я предполагаю, что основной механизм привязки MVC для ASP.NET не привяжет json к "строковому значению", но, возможно, Я мог бы сделать что-то еще, что дает мне эквивалентный уровень гибкости.
Подобный вопрос здесь дает мне идею, может быть, я должен был написать [FromBody] dynamic data
вместо использования [FromBody] string value
.
Обновление. Об этом следует подумать, прежде чем делать это, потому что если вы хотите, чтобы ядро core.net обрабатывало JSON и XML-кодировку, вы просто убили эту возможность. Некоторые типы серверов REST могут и часто имеют требования к поддержке типов контента XML и JSON, по крайней мере, тех, с которыми я столкнулся, которые имеют документы стандартов.