在 .NET 中使用 WebClient 发送 PATCH 请求

Sending PATCH request using WebClient in .NET

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

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;
    }            
}

在此代码段中,endpoint 是我要 PATCH 访问的 URI,bodyNameValueCollection.

这给我一个 HTTP 400“错误请求”错误。如果我在异常中向下钻取,则表明违反了协议。我尝试为 content-type 添加 header,但这没有帮助。

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

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

更新

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

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

我使用 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 。我不确定是否有更好的方法来执行此操作,但它现在似乎有效。