繁体   English   中英

RestSharp 在 ASP.NET Core 3.1 中导致内部服务器错误

[英]RestSharp causes internal server error in ASP.NET Core 3.1

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM