c# - 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);
}
解决方案
根据 RestSharp 文档,您应该使用 .AddJsonBody 方法
我们建议使用 AddJsonBody 或 AddXmlBody 方法,而不是使用 BodyParameter 类型的 AddParameter。这些方法将设置正确的请求类型并为您完成序列化工作。
当您调用 AddJsonBody 时,它会为您执行以下操作:
- 指示 RestClient 在发出请求时将对象参数序列化为 JSON
- 将内容类型设置为 application/json
- 将请求正文的内部数据类型设置为 DataType.Json
https://restsharp.dev/usage/parameters.html#request-body
您的代码不起作用,因为您发送的是没有序列化的 T 对象。
推荐阅读
- amazon-web-services - Terraform 中的 Elastic Beanstalk HTTP 到 HTTPS 重定向
- python - python数据类的预期行为或错误?
- php - 为 WooCommerce 中销售的产品启用免费送货
- python - 为什么记分卡没有响应我想要实现的内容
- linux - sonarqube.service 启动请求重复太快 - Sonarqube
- php - PHP 合并具有相同 ID 的数组
- swift - 无法从 Swift 中的 API 获取图像
- mysql - Sql查询连接2个表并计算匹配和不匹配行的值
- php - Laravel - 如何仅为双核安全禁用 CSRF
- ruby - 使用相同的键将嵌套哈希与 deep_merge 合并