#json #asynchronous #asp.net-web-api #httprequest
#json #асинхронный #asp.net-web-api #httprequest
Вопрос:
Я создал проект WebAPI, чтобы помочь захватить инструкции из учебного курса TinCan, но у меня возникают чрезвычайные трудности с получением любых сведений о полезной нагрузке запроса. В этой полезной нагрузке я передаю весь оператор, который я пытаюсь захватить, но при попытке прочитать с помощью:
var test = Request.Content.ReadAsFormDataAsync().Result.ToString();
Я получаю следующее сообщение об ошибке:
Не доступен MediaTypeFormatter для чтения объекта типа FormDataCollection из содержимого с типом носителя application / json.
Я попытался преобразовать результирующий объект в JSON, чтобы преодолеть эту проблему, но это не помогло. Нужно ли мне настраивать json где-то в конфигурации? Я попытался добавить
var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
а также:
var jsonFormatter = config.Formatters.JsonFormatter;
config.Formatters.Insert(0, jsonFormatter);
в мой файл WebApiConfig.cs, как указано в другом вопросе о том, как вернуть json, но, похоже, я не могу передать эту ошибку. Я также установил config.formatter для приема application / json, но это также не сработало
КОД КОНТРОЛЛЕРА
public void Put([FromBody]string statementId)
{
var test = Request.Content.ReadAsFormDataAsync().Resu<
System.Diagnostics.EventLog.WriteEntry("Application", "/xAPI/PUT has been called", System.Diagnostics.EventLogEntryType.Error);
}
Комментарии:
1. Публикация кода вашего контроллера помогла бы.
Ответ №1:
Из сообщения об ошибке, которое вы предоставили, похоже, что содержимое запроса application/json
включено. ReadAsFormDataAsync()
можно читать только содержимое типа application/x-www-form-urlencoded
.
В этом случае вы можете использовать ReadAsAsync<>
, если у вас есть определенный тип, который вы хотите десериализовать, или просто использовать ReadAsStringAsync<>
, если вы просто хотите прочитать содержимое как string
.