我正在尝试调用此方法
[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'类型的对象”。
答案 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
}
}