我创建了一个 WebAPI 项目来帮助捕获 TinCan 学习类(class)中的语句,但我在检索任何请求负载详细信息时遇到了极大的困难。在此有效负载中,我传递了我试图捕获的整个语句,但在尝试使用以下内容进行读取时:
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 但这也不起作用
Controller 代码
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);
}
最佳答案
从您提供的错误消息来看,请求内容似乎在 application/json
中。 ReadAsFormDataAsync()
只能读取 application/x-www-form-urlencoded
类型的内容。
在这种情况下,您可以使用ReadAsAsync<>
如果您定义了想要反序列化的类型,或者只需使用 ReadAsStringAsync<>
如果您只想将内容阅读为 string
.
关于json - 尝试解析 WebAPI 中的 ReadAsFormDataAsync 结果时没有 MediaTypeFormatter 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24433855/