找不到mediatype格式化程序

时间:2015-11-02 22:05:10

标签: c# asp.net-web-api

我正在尝试调用此方法

    [HttpGet]
    [Route("api/Trinity/GetDirectoryAndTask/{modelTemplateId}/{taskName}")]
    public KeyValuePair<string, string> GetDirectoryAndTask(int modelTemplateId, string taskName)

使用网址http://localhost:46789/api/Trinity/GetDirectoryAndTask/9/AG33%2f34但是我正在使用“MediaTypeFormatter可以从媒体类型为'text / html'的内容中读取'KeyValuePair`2'类型的对象”。

1 个答案:

答案 0 :(得分:1)

由于在路由值中使用/%2f,我怀疑服务器端的主要问题应该是:

HTTP错误404.0 - 未找到
您要查找的资源已被删除,名称已更改或暂时不可用。

要解决此问题,您可以将路由更改为:

api/Trinity/GetDirectoryAndTask/{modelTemplateId}/{*taskName}

要测试服务器端是否正常,请将该网址粘贴到浏览器中并获取结果。

但对于客户端,错误与您从该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
    }
}