我创建了一个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);
}
答案 0 :(得分:5)
根据您提供的错误消息,似乎请求内容位于application/json
中。 ReadAsFormDataAsync()
只能阅读application/x-www-form-urlencoded
类型的内容。
在这种情况下,如果您要定义要反序列化的类型,则可以使用ReadAsAsync<>
;如果您只想将内容读作ReadAsStringAsync<>
,则只需使用string
。