【问题标题】:Sending PATCH request using WebClient in .NET在 .NET 中使用 WebClient 发送 PATCH 请求
【发布时间】:2020-12-04 08:53:09
【问题描述】:

我有一个较旧的 ASP.NET WebForms 站点。我正在尝试使用 WebClient 向 REST API 发送 PATCH 请求:

using (WebClient client = new WebClient())
{
    client.Headers[HttpRequestHeader.Authorization] = "Bearer " + authToken;
    try
    {
        responseString = Encoding.UTF8.GetString(client.UploadValues(endpoint, "PATCH", body));
    }                
    catch (Exception e)
    {
        return e;
    }            
}

在这个 sn-p 中,endpoint 是我 PATCH 的 URI,bodyNameValueCollection

这给了我一个 HTTP 400“错误请求”错误。如果我深入研究异常,则表明存在协议违规。我尝试为内容类型添加标题,但这没有帮助。

同样的代码确实适用于POST 请求,这就是我成功获取访问令牌的方式。但它不适用于PATCH。有没有办法使用WebClient 发送有效的PATCH 请求?

我知道那里还有其他库,但如果可能的话,我希望在使用WebClient 时与此类中的其余代码保持一致。如果我必须切换到其他东西,我也想更新其余代码。

更新

是的,API 确实支持PATCH。它是 Microsoft Graph API,PATCH 与 Postman 配合得很好。

【问题讨论】:

  • 你的 API 支持 PATCH 吗?
  • 是的,它是 Microsoft Graph API,并且 PATCH 可以与 Postman 配合使用。

标签: c# asp.net webforms webclient


【解决方案1】:

看起来不错。如果 API 支持 PATCH,您应该会收到响应。 你能检查一下 API 上是否实现了 PATCH 吗?
另一种可能是您违反了 PATCH 方法中应用的一些验证规则。

【讨论】:

  • 是的,它是 Microsoft Graph API,并且 PATCH 可以与 Postman 配合使用。
【解决方案2】:

我使用UploadString方法让它工作,如下:

using (WebClient client = new WebClient())
{
    client.Headers[HttpRequestHeader.Authorization] = "Bearer " + authToken;
    try
    {
        client.Headers[HttpRequestHeader.ContentType] = "application/json";
        responseString = client.UploadString(endpoint, method, body);
    }                
    catch (Exception e)
    {
        return e;
    }            
}

body 是 JSON 格式的字符串,而不是我最初尝试的 NameValueCollection。我不确定是否有更好的方法来做到这一点,但它现在似乎正在工作。

【讨论】:

    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 2016-10-25
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多