尝试使用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”的标题。是吗?
知道会发生什么事吗?
答案 0 :(得分:5)
通常在HTTP中,当客户端向服务器发出请求时,它会告诉服务器它准备理解哪种格式(接受)。可接受格式的列表是Accept标头的用途。如果服务器无法使用Accept标头中的任何媒体类型进行响应,则它将返回406.否则,它将指示它在响应的Content-Type标头中选择的媒体类型。放" * / *"在Accept标头中告诉服务器客户端可以处理任何响应媒体类型。
在我对您的问题的原始评论中,我说RestSharp看起来像包括" *"默认情况下在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.一旦你弄清楚了服务器可以发送给你的媒体类型,你应该把它改回你知道你可以阅读的媒体类型,你知道服务器可以发送。
这听起来像这里的主要问题实际上只是不知道服务器的协议。如果有关于您正在与之交谈的服务的任何文档,我会仔细阅读,以弄清楚它准备回应的媒体类型以及如何制作它所期望的网址。