使用 RestSharp 时,我在 POST 上收到 MethodNotFound 但响应认为它是 GET?

问题描述 投票:0回答:3

我正在使用 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 中看到的屏幕截图:

enter image description here

我什至尝试过改变:

  client.Execute(request);

  client.Post(request);

但它仍然显示同样的事情。有什么想法吗?

c# restsharp methodnotfound
3个回答
4
投票

事实证明这是网络服务器端的重定向问题,因此与 Rest Sharp 无关

我已要求删除该问题以避免任何混乱。


2
投票

这是跨域请求吗?如果是这样,那么我怀疑 RestSharp 在执行实际的 HTTP POST 之前正在发出 CORS 预检请求。如果不允许跨域 POST,“405 方法不允许”是对 CORS 请求的正确响应。我不确定该屏幕截图是否显示了“所有”HTTP 标头。它是否在 GET 中发送 Access-Control-* 标头?这样就可以证实了。


0
投票

//client.AddDefaultHeader("Content-Type", "application/json"); //bad in my case client.AddDefaultHeader("Accept", "application/json"); //good in my case

© www.soinside.com 2019 - 2024. All rights reserved.