找不到媒体类型格式化程序
Posted
技术标签:
【中文标题】找不到媒体类型格式化程序【英文标题】:No mediatype formatter found 【发布时间】:2015-11-02 22:05:09 【问题描述】:我正在尝试调用此方法
[HttpGet]
[Route("api/Trinity/GetDirectoryAndTask/modelTemplateId/taskName")]
public KeyValuePair<string, string> GetDirectoryAndTask(int modelTemplateId, string taskName)
使用 url http://localhost:46789/api/Trinity/GetDirectoryAndTask/9/AG33%2f34 但我得到一个“MediaTypeFormatter 可用于从媒体类型为'text/html'的内容中读取类型为'KeyValuePair`2'的对象”异常。
【问题讨论】:
听起来你和这个人有同样的问题***.com/questions/12512483/… 【参考方案1】:由于在路由值中使用了/
或%2f
,我怀疑服务器端的主要问题应该是:
HTTP 错误 404.0 - 未找到 您要查找的资源已被删除、名称已更改或暂时不可用。
要解决它,您可以将路由更改为:
api/Trinity/GetDirectoryAndTask/modelTemplateId/*taskName
要测试服务器端是否正常,请将url粘贴到浏览器中并获取结果。
但对于您的客户端,错误与您从该 api 读取数据的方式有关。我使用此代码并在更改路线后读取数据:
using (var client = new HttpClient())
client.BaseAddress = new Uri(" http://localhost:46789/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.GetAsync("api/Trinity/GetDirectoryAndTask/9/AG33%2f34");
if (response.IsSuccessStatusCode)
var result = await response.Content.ReadAsAsync<KeyValuePair<string, string>>();
//The result is a valid key/value pair
【讨论】:
以上是关于找不到媒体类型格式化程序的主要内容,如果未能解决你的问题,请参考以下文章
泽西岛:找不到媒体类型 = 应用程序/json、类型 = 类 org.codehaus.jackson.node.ObjectNode 的 MessageBodyWriter?
严重:找不到媒体类型 = 应用程序/json、类型 = 类 com.jersey.jaxb.Todo、通用类型 = 类 com.jersey.jaxb.Todo 的 MessageBodyWriter
找不到 Java 类型 myPackage.B 类和 MIME 媒体类型 application/octet-stream 的消息正文编写器
找不到类型的响应对象的 MessageBodyWriter:媒体类型的 java.util.LinkedHashMap:application/json
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:找不到媒体类型的 MessageBodyWrite