我如何在 asp.net 中与其余客户端一起传递 json 补丁数据?

How do I pass along json patch data with rest client in asp.net?

我们用休息api来获取客户信息。许多 GET 请求已经由其他人编写。我能够按照他们的代码创建其他 GET 请求,但是更新客户的 API 方法之一需要使用 json 补丁。下面我粘贴了一个当前 GET 方法的示例代码,一个 Patch 方法(我不知道如何实现)和一个用 javascript 编写的关于如何使用 json-patch 的示例函数来自 api 创作者演示文档:

public GetCustomerResponse GetCustomerInfo(CustomerRequest request)
{
    //All of this works fine the base url and token info is handled elsewhere
    var restRequest = CreateRestRequest($"customer/account?id={request.id}", RestSharp.Method.GET);

    var response = CreateRestClient().Execute<GetCustomerResponse>(restRequest);

    if (response.StatusCode == HttpStatusCode.OK)
    {
        return response.Data;
    }
    else
    {
        return new GetCustomerResponse(response.Content);
    }   
}

public EditCustomerResponse EditCustomer(EditCustomerRequest request)
{
    var restRequest = CreateRestRequest($"customer/account?id={request.id}", RestSharp.Method.PATCH);

    var response = CreateRestClient().Execute<EditCustomerResponse>(restRequest);

    //how do I pass along json patch data in here???
    //sample json might be like:
    //[{'op':'replace','path':'/FirstName','value':'John'},{'op':'replace','path':'/LastName','value':'Doe'}]
    
    if (response.StatusCode == HttpStatusCode.OK)
    {
        return response.Data;
    }
    else
    {
        return new EditCustomerResponse(response.Content);
    }
}


//javascript demo version that is working
function patchCustomer(acctId, patch, callback) {
    var token = GetToken();

    $.ajax({
        method: 'PATCH',
        url: BaseURI + 'customer/account?id=' + acctId,
        data: JSON.stringify(patch),
        timeout: 50000,
        contentType: 'application/json; charset=UTF-8',
        beforeSend: function (xhr) { xhr.setRequestHeader('Authorization', 'Bearer ' + token.access_token) },
    }).done(function (data) {
        if (typeof callback === 'function')
            callback.call(data);
    }).fail(function (jqXHR, textStatus, errorThrown) {
        console.log("Request failed: " + textStatus);
        console.error(errorThrown);
        failureDisplay(jqXHR);
    });
}

这很简单。在 Whosebug 上查看类似问题后,我最初尝试这样的事情:

var body = new
            {
                op = "replace",
                path = "/FirstName",
                value = "John"
            };
            
restRequest.AddParameter("application/json-patch+json", body, ParameterType.RequestBody);

这是行不通的。为了让它工作,我添加了一个带有 op、path 和 value 属性的 patchparameters class,然后向我的 EditCustomerRequest class 添加了一个 patchparameters 类型的列表 属性 并像这样使用它:

restRequest.AddJsonBody(request.patchParams);