【问题标题】:Rest Sharp - 406 Error - No match for accept headerRest Sharp - 406 错误 - 接受标头不匹配
【发布时间】:2013-04-04 12:30:10
【问题描述】:

我在尝试使用 RestSharp 向第三方应用程序发布请求时收到 406 错误。我是 REST 新手,所以我不得不承认我什至不知道您可以添加标题。我尝试添加这些,但我仍然遇到同样的问题:

    var client = new RestClient(myURL);            

    RestRequest request = new RestRequest("restAction", Method.POST);     

    request.AddHeader("Accept", "text/plain"); 
    request.AddHeader("Content-Type", "text/plain");

    request.AddParameter("parameter1", param1);
    request.AddParameter("parameter2", param2);

    var response = client.Execute(request);

根据我的阅读,这可能是在处理名为“accept”的标头。对吗?

知道会发生什么吗?

【问题讨论】:

  • 如果将接受标头设置为“*/*”,是否仍会收到 406 状态码?这应该告诉服务器可以用它喜欢的任何格式进行响应,所以如果你仍然得到 406,那么服务器似乎有一些内容协商问题。 (似乎默认情况下,RestSharp 确实在其 Accept 标头中包含“*”,所以我很惊讶您最初得到 406,但可能是“*”无法识别,但“*/*”是)
  • 一般来说,在 HTTP 中,当客户端向服务器发出请求时,它会告诉服务器它准备理解(接受)哪种格式。这个可接受格式的列表就是 Accept 标头的用途。如果服务器无法使用 Accept 标头中的任何媒体类型进行响应,它将返回 406。否则,它将在响应的 Content-Type 标头中指示它选择的媒体类型。将“*/*”放在 Accept 标头中告诉服务器客户端可以处理任何响应媒体类型。
  • @JenS 谢谢。我现在得到一个不同的错误——资源不可用。正如您可能知道的那样,获得不同的错误是开发人员可以拥有的最大乐趣之一!
  • @JenS 把这个变成答案,我会接受的。

标签: c# rest restsharp http-status-code-406


【解决方案1】:

一般来说,在 HTTP 中,当客户端向服务器发出请求时,它会告诉服务器它准备好理解(接受)哪种格式。这个可接受格式的列表就是 Accept 标头的用途。如果服务器无法使用 Accept 标头中的任何媒体类型进行响应,它将返回 406。否则,它将在响应的 Content-Type 标头中指示它选择的媒体类型。将“*/*”放在 Accept 标头中告诉服务器客户端可以处理任何响应媒体类型。

在我对您的问题的原始评论中,我说 RestSharp 看起来默认情况下在 Accept 标头中包含“*”,但仔细观察我现在发现它实际上不是。因此,如果您没有像在此处所做的那样覆盖 Accept 标头,则默认标头值为 "application/json","application/xml","text/json","text/x-json","text/javascript","text/xml",并且您正在与之交谈的服务器似乎不会使用这些媒体类型中的任何一种。

如果您使用的服务器不支持 json 或 xml,我认为您不能使用 RestSharp,除非您创建自己的反序列化器。我不确定您是否可以从公共 API 执行此操作,或者您是否必须自己修改源代码并根据自己的需要重新编译。

由于您仍然收到来自服务器的 HTTP 错误,我建议您暂时将 RestSharp 排除在等式之外,直接将 HTTP 与服务器对话,直到您真正从服务器获得正确的响应。您可以使用Fiddler 之类的工具直接发出 HTTP 请求。当您发送请求时(目前处于调试阶段),发送一个“*/*”的 Accept 标头以绕过 406。一旦您确定了服务器可以发回给您的媒体类型,您应该更改这又回到了你知道你可以阅读并且你知道服务器可以发送的媒体类型。

听起来这里的主要问题实际上只是不知道服务器的协议。如果您正在与之交谈的服务有任何文档,我会非常仔细地阅读,以确定它准备响应的媒体类型以及如何制作它期望的 URL。

【讨论】:

    猜你喜欢
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 2017-12-24
    相关资源
    最近更新 更多