【问题标题】:No MediaTypeFormatter is available 'text/html'没有可用的 MediaTypeFormatter 'text/html'
【发布时间】:2014-08-07 13:55:02
【问题描述】:

我已经编写了一个 ServiceHelper 类,它将协助 POST 到 C# Web API 控制器

public class ServiceHelper<TResponse, TRequest> : IServiceHelper<TResponse, TRequest>
{
    public TResponse Execute
        (
        string endpoint, 
        string controller, 
        string action, 
        TRequest request,
        string format = "application/json"
        )
    {
        using (var httpClient = new HttpClient())
        {
            httpClient.BaseAddress = new Uri(endpoint);
            httpClient.DefaultRequestHeaders.Accept.Clear();
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(format));

            var response = httpClient.PostAsJsonAsync(String.Format("{0}/{1}", controller, action),
                request).Result;

            return response.Content.ReadAsAsync<TResponse>().Result;
        }
    }
}

我一直在努力

Additional information: No MediaTypeFormatter is available to read an object of type 'ReadMotorVehiclesWorkflowResponse' from content with media type 'text/html'.

关于如何解决这个问题的任何想法?

【问题讨论】:

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


    【解决方案1】:

    显然服务器在你期望 JSON 的地方返回 HTML,显然没有办法从 HTML 反序列化 TResponse...

    我怀疑服务器实际上是在返回错误代码,而 HTML 只是错误的视觉表示。

    您应该致电response.EnsureSuccessStatusCode() 以确保响应指示成功(通常为 200 OK)。如果不是这样,它会引发异常。

    【讨论】:

    • 谢谢,收到 404 错误,所以至少我现在走在正确的轨道上
    【解决方案2】:

    好的,问题是应用程序池的 .NET 版本设置为 2.0 版,而 Web API 是为 .NET 4.0 版编写的,我更改了版本,现在它可以按预期工作了。

    值得注意的是,拨打response.EnsureSuccessStatusCode() 是个好主意,如下面的答案所述。

    【讨论】:

      猜你喜欢
      • 2018-05-29
      • 2012-05-11
      • 1970-01-01
      • 2018-07-03
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      相关资源
      最近更新 更多