Nar*_*ian 0 c# rest restsharp http-status-code-406
尝试使用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);
Run Code Online (Sandbox Code Playgroud)
根据我的阅读,这可能是处理名为"接受"的标题.是对的吗?
知道会发生什么吗?
通常在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.
| 归档时间: |
|
| 查看次数: |
5963 次 |
| 最近记录: |