首页 > 解决方案 > RestSharp 在 ASP.NET Core 3.1 中导致内部服务器错误

问题描述

我正在使用 RestSharp 进行 API 调用,但是当我发布数据时,出现内部服务器错误。这是我的代码。内容是我传递的通用模型。

private async Task<Message<T>> PostAsyncRestSharp<T>(Uri requestUrl, T content)
{
    try
    {
        var client = new RestClient(requestUrl.ToString());
        client.Timeout = -1;

        var request = new RestRequest(Method.POST);
        request.AddHeader("Content-Type", "application/json");
        request.AddParameter("application/json", content, ParameterType.RequestBody);

        IRestResponse response = await client.ExecuteAsync(request);

        var resp = response.Content;
        return JsonConvert.DeserializeObject<Message<T>>(resp);
    }
    catch (Exception ex)
    {
        throw;
    }
}

它甚至没有击中 catch 块。

接听电话

接听电话工作正常

private async Task<T> GetAsyncRestSharp<T>(Uri requestUrl, string urlParams)
        {
            var client = new RestClient($"{requestUrl}?{urlParams}");
            client.Timeout = -1;
            var request = new RestRequest(Method.GET);
            request.AddParameter("text/plain", "", ParameterType.RequestBody);
            IRestResponse response = await client.ExecuteAsync(request);
            var resp = response.Content;
            return JsonConvert.DeserializeObject<T>(resp);
        }

标签: c#asp.net-corerestsharp

解决方案


根据 RestSharp 文档,您应该使用 .AddJsonBody 方法

我们建议使用 AddJsonBody 或 AddXmlBody 方法,而不是使用 BodyParameter 类型的 AddParameter。这些方法将设置正确的请求类型并为您完成序列化工作。

当您调用 AddJsonBody 时,它会为您执行以下操作:

  • 指示 RestClient 在发出请求时将对象参数序列化为 JSON
  • 将内容类型设置为 application/json
  • 将请求正文的内部数据类型设置为 DataType.Json

https://restsharp.dev/usage/parameters.html#request-body

您的代码不起作用,因为您发送的是没有序列化的 T 对象。


推荐阅读