【发布时间】: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