【问题标题】:C# Getting Response 405 by using RestSharp DeleteC# 使用 RestSharp Delete 获取响应 405
【发布时间】:2015-04-02 13:44:18
【问题描述】:

我尝试通过调用删除 API 来删除配置。 对于我的 API 请求,我使用 Restsharp,因为它适用于 GET 和 POST。

现在我有以下问题。当我尝试调用删除时,我得到错误

405 "MethodNotAllowed".

在我的回复中,我有以下消息:

“HTTP 方法不允许,支持的方法:GET”

代码片段:

var client = new RestClient("http://test.de/");
var request = new RestRequest("testrules/test");
request.Credentials = new NetworkCredential("username", "password");
var response = client.Delete(request);

我还尝试了client.Execute() 方法,并将我要删除的元素的 id 添加到 AddParameter()AddUrlSegment() 方法上。

我已经在 Fiddler 中跟踪了响应:

DELETE http://test.de/testrules/test HTTP/1.1 
Accept: application/json, application/xml, text/json, text/x-json, text/javascript, text/xml 
User-Agent: RestSharp/105.0.1.0 
Host: test.de
Content-Length: 0
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

当我在 Chrome 中使用 Advanced RestClient 尝试我的请求时,我在 Fiddler 中收到以下请求:

DELETE http://test.de/testrules/test HTTP/1.1
Host: test.de
Connection: keep-alive
Authorization: Basic Q29udGludW91czp0ZXN0
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36
Origin: chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo
Content-Type: application/json
Accept: */*
Accept-Encoding: gzip, deflate, sdch
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4

有人知道使用 RestSharp 删除的示例吗? 我从 stackoverflow 中查看了这个示例:RestSharp simple complete example 和 RestSharp 文档中的示例,但这些示例对我没有任何帮助。

【问题讨论】:

  • REST 服务器是你的还是第三方的?
  • REST 服务器不是我的。
  • 端点支持 DELETE,因为我只能使用 Chrome 的 RestClient 调用带有 DELETE 的端点。如果我尝试使用 GET 或 POST 等其他语句(它还应该是什么?)它也不起作用。并且在文档中写到它是DELETE。
  • 我错过了您可以与其他客户联系的部分。

标签: c# restsharp methodnotfound


【解决方案1】:

您有可以发布的 Rest API 服务代码吗?从您写的内容来看,感觉就像 restsharp 客户端使用 HTTP DELETE 关键字发出删除请求,而 Rest API 端点接受 HTTP GET 的 Delete 方法;但是如果没有有关服务器端代码的信息,就很难说。

【讨论】:

  • 不,我没有服务器端代码。但我知道服务器只接受删除。那么为什么它应该与 Advanced RestClient 一起使用呢?在那里我配置了删除,当我用restclient调用api时,我必须使用delete,否则它将无法工作。我认为 RestSharp 有问题。也许我配置有问题,但我不太确定。
  • 在这两个请求中我还可以看到另一个不同之处——即 Advanced RestClient 的标头具有 Authorization 行。这可能是问题,DELETE 方法需要授权,而 GET 不需要?
  • (抱歉,帖子中并不清楚 Advanced RestClient 请求是否真的有效)
  • 我使用客户端的凭据来授权,但它没有显示在 Fiddler 中。我不知道为什么。但是 GET 和 POST 正在使用授权,对于这个请求,我在 Fiddler 中也看不到它。这就是我设置凭据的方式,只是忘记将其发布在描述中。 request.Credentials = new NetworkCredential("username", "password");
  • 我不熟悉 RestSharp,所以我不太确定。但是从github.com/restsharp/RestSharp/wiki/Authenticators看来,您似乎还需要向客户端添加身份验证器,而不仅仅是请求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-15
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
  • 1970-01-01
相关资源
最近更新 更多