尝试解析WebAPI中的ReadAsFormDataAsync结果时没有MediaTypeFormatter错误

时间:2014-06-26 14:58:32

标签: json asynchronous asp.net-web-api httprequest

我创建了一个WebAPI项目来帮助捕获来自TinCan学习课程的语句,但是我在检索任何请求有效负载详细信息方面遇到了极大的困难。在这个有效载荷中,我传递了我试图捕获的整个语句,但在尝试使用时读取:

var test = Request.Content.ReadAsFormDataAsync().Result.ToString();

我收到以下错误消息:

没有MediaTypeFormatter可用于从媒体类型为“application / json”的内容中读取“FormDataCollection”类型的对象。

我已经尝试将结果对象转换为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().Result;

        System.Diagnostics.EventLog.WriteEntry("Application", "/xAPI/PUT has been called", System.Diagnostics.EventLogEntryType.Error);
    }

1 个答案:

答案 0 :(得分:5)

根据您提供的错误消息,似乎请求内容位于application/json中。 ReadAsFormDataAsync()只能阅读application/x-www-form-urlencoded类型的内容。

在这种情况下,如果您要定义要反序列化的类型,则可以使用ReadAsAsync<>;如果您只想将内容读作ReadAsStringAsync<>,则只需使用string