使用 RestSharp Post 对象作为 JSON 并从调用的另一端读取它

Use RestSharp Post Object as JSON and read it from the other side of the call

我有一个 C# REST Web API 并且我有一些像这样的代码可以向端点发出请求。我想传递的一些数据是我自己类型的对象,因为它是一个复杂的对象,所以我想使用 POST.

传递它
RestClient client = new RestClient(Constants.Endpoints.serviceEndPoint)
{
    Timeout = 1000
};

string requestResource = Constants.Endpoints.apiEndPoint;
RestRequest request = new RestRequest(requestResource, Method.POST);
request.AddParameter("Authorization", $"Bearer {accessToken}", ParameterType.HttpHeader);
request.AddHeader("Accept", "application/json");
request.AddParameter("id", id, ParameterType.UrlSegment);
request.AddParameter("text/json", objectIWantToSerialize, ParameterType.RequestBody);

IRestResponse response = client.Execute(request);

另一方面,我正在尝试使用类似这样的代码读取对象本身

var provider = new MultipartMemoryStreamProvider();

await Request.Content.ReadAsMultipartAsync(provider);

    foreach (var content in provider.Contents)
    { 
       // what should I do here to read the content as a JSON 
       // and then transform it as the object it used to be before the call?
    }

我试过 await content.ReadAsJsonAsync< MyType>(); 但也试过 await content.ReadAsStringAsync();[=其中 22=] 和 none 有效。我在客户端执行时是否做错了什么?还是我一边看内容一边做的事情?

代替这一行: request.AddParameter("text/json", objectIWantToSerialize, ParameterType.RequestBody);

您应该使用 .AddBody(object) 方法。 所以你的代码看起来像这样:

RestRequest request = new RestRequest(requestResource, Method.POST);
//add other headers as needed
request.RequestFormat = DataFormat.Json;
request.AddBody(objectIWantToSerialize);

IRestResponse response = client.Execute(request);

在服务器上,如果您使用 MVC/WebAPI,您只需将 C# 类型作为输入,ASP.NET 将为您反序列化。如果没有,您能否提供更多关于您如何收到请求的背景信息?