【问题标题】:WebClient restful DeleteWebClient restful 删除
【发布时间】:2012-09-04 19:29:35
【问题描述】:

我从控制台应用程序调用了一个简单的 Restful 服务,所以我使用 WebClient。我想知道这个删除的调用是否正确。

网址看起来像localhost/RestService1/Person/1

using (var client = new WebClient()) 
{
    client.UploadString(url, "DELETE", "");
}

我不喜欢 UploadString 在没有 data 参数的情况下没有重载。传递一个空参数并不适合我。有没有更好的方法用于DELETE

我可以使用WebRequest,但我只想使用WebClient 保持一致。

这是WebRequest

var request = WebRequest.Create(url);
request.Method = "DELETE";
var response = (HttpWebResponse)request.GetResponse();

两个块都可以正常工作,但最好的是什么?还是有更好的办法?

【问题讨论】:

  • 除了那些引用中与 DELETE 和 RESTful 的关系之外,我认为 WebClient 并没有真正为您提供 DELETE 的语义。 Webclient 只是在幕后使用WebRequest (HttpWebRequest),所以我认为直接使用HttpWebRequest) 更具可读性。
  • 我不认为前 2 个链接涉及我的问题。我的 url 是 localhost/RestService1/Person/1 其中 /1 是人员 ID,所以它很安静。我做了更多的挖掘,发现 WebClient 主要是一个包装器。谢谢

标签: c# httpwebrequest webclient


【解决方案1】:

WebClient 类并不能很好地用于安静的 api 消费,我过去使用过像 RestSharp 这样的第三方库,它们更适合这种类型的网络请求。我很确定 RestSharp 只是在幕后使用了 HttpWebRequest,但它提供了许多语义,使得使用和重用 rest 资源更容易。

【讨论】:

  • 我正在使用 WebClient 和 Newtonsoft Json,它使用起来非常简单。我会调查 RestSharp。谢谢
【解决方案2】:

去获取 Microsoft.Net.Http 客户端库http://nuget.org/packages/Microsoft.Net.Http

HttpClient 是一个更好的客户端,可用于处理 API。

【讨论】:

  • Visual Studio 2010 不支持此包,只有在使用使用此包的库时,面向 .NET Framework 4.5 或 .NET for Windows Store 应用程序的项目才需要此包。
  • @juFo VS2010 和 .net 4.0 都支持。我不知道你为什么会这么想。
  • 我刚刚引用了您提供的链接:nuget.org/packages/Microsoft.Net.Http
  • @juFo 啊啊。不幸的是,自从我发布后,该链接的内容发生了变化!那是 HttpClient 的预发布“便携式库”版本。如果您选择稳定版,您将获得 .net 4/VS2010 兼容版本。
  • HttpClient 的使用很笨拙,因为它只包含 ASYNC 方法(并不总是可取的)。此外 - MS 文档说 HttpClient 不是 WebClient 的替代品。
【解决方案3】:

以下对我有用:

client.UploadValues(url, "DELETE", new NameValueCollection()); 

【讨论】:

  • 如果您需要提供额外的参数(例如api_key),您可以通过url中的查询字符串提供它们。
  • client.UploadString(url, "DELETE", string.Empty) 也能正常工作
【解决方案4】:

对不起,这是我在 vb.net 中的解决方案,我相信任何人都可以翻译成 c#

删除标题非常重要,我必须评论有关 Accept 和 Content-Type 的标题并且工作正常.....当然我确实发送了令牌

Dim rest As WebClient = New WebClient()
rest.Headers.Add(HttpRequestHeader.Authorization, "Bearer " & Token)
'rest.Headers.Add(HttpRequestHeader.Accept, "application/json")
'rest.Headers.Add(HttpRequestHeader.ContentType, "application/json")

result = System.Text.Encoding.UTF8.GetString(rest.UploadValues(host_api & uri, "DELETE", New NameValueCollection()))

【讨论】:

    猜你喜欢
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    相关资源
    最近更新 更多