Нет ошибки MediaTypeFormatter при попытке проанализировать результат ReadAsFormDataAsync в WebAPI

#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 .