我正在使用 RestSharp 并第一次执行 POST,我有很多 GET 请求,都工作正常)。 Rest 服务是用 python 编写的,但我认为这对这个问题来说并不重要。这是我的代码:
var client = new RestClient { BaseUrl = _baseUrl };
var request = new RestRequest("nameOfPostMethod", Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddBody(new { name, description });
request.AddHeader("accept", "application/json");
var response = client.Execute(request);
这是我得到的原始回复:
[{"name": "405 - Method Not Allowed", "data":
[["Class", "werkzeug.exceptions.MethodNotAllowed"], ["Category", "Client Error"],
["Code", "405"], ["Name", "Method Not Allowed"], ["request.method", "GET"],
["request.url", "http://myUrl/nameOfPostMethod"], ["error.message", "405 Method
Not Allowed"], ["error.description", null]]}]
让我印象深刻的是这些行,它似乎认为我正在执行 GET 而不是 POST:
["request.method", "GET"]
["error.message", "405 Method Not Allowed"]
对我在这里可能做错的事情有什么建议吗?
我下载了 fiddler 并尝试看看发生了什么,有趣的是,当我查看标题时,它确实显示了 GET。这是我在 fiddler 中看到的屏幕截图:
我什至尝试过改变:
client.Execute(request);
到
client.Post(request);
但它仍然显示同样的事情。有什么想法吗?
事实证明这是网络服务器端的重定向问题,因此与 Rest Sharp 无关
我已要求删除该问题以避免任何混乱。
这是跨域请求吗?如果是这样,那么我怀疑 RestSharp 在执行实际的 HTTP POST 之前正在发出 CORS 预检请求。如果不允许跨域 POST,“405 方法不允许”是对 CORS 请求的正确响应。我不确定该屏幕截图是否显示了“所有”HTTP 标头。它是否在 GET 中发送 Access-Control-* 标头?这样就可以证实了。
//client.AddDefaultHeader("Content-Type", "application/json"); //bad in my case
client.AddDefaultHeader("Accept", "application/json"); //good in my case