找不到媒体类型格式化程序

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

找不到类型或命名空间名称“readFullyStream”

org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:找不到媒体类型的 MessageBodyWrite