c# - 准备控制器和http请求以处理请求而不返回值
问题描述
我有以下方法来收集汽车:
public async Task<IEnumerable<Car>> GetCars(object car, CancellationToken ct)
{
var uri = new Uri($"{_webApiUrl}Car/GetCars");
using (var httpClient = new HttpClient())
{
HttpContent content = new StringContent(JsonConvert.SerializeObject(car), Encoding.UTF8, "application/json");
var req = await httpClient.PostAsync(uri, content, ct);
var response = await req.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<IEnumerable<Car>>(response);
}
}
在我的控制器中的服务 api 中,我有这个来获取它:
[HttpPost]
[Route("api/[controller]/[action]")]
public IActionResult GetBottleTypeById(Car car)
{
return Ok(_carQuery.GetCars(car));
}
这两件事都很好 - 没有问题。
现在我需要保存Car
并且我不需要返回一些东西(最终我可以返回真或假,无论它是否成功)。问题是我不确定controller's
method
应该是什么样子,如果我这样做,它会说:not all code path returns value:
[HttpPost]
[Route("api/[controller]/[action]")]
public IActionResult UpdateOperation(Car car)
{
_carRepository.UpdateOperation(car) //UpdateOperation is void with try/catch - throw;
}
同样的事情request
,这应该如何完成?
public async Task UpdateCar(Car selectedCar, CancellationToken ct)
{
var uri = new Uri($"{_webApiUrl}Car/UpdateOperation");
using (var httpClient = new HttpClient())
{
HttpContent content = new StringContent(JsonConvert.SerializeObject(selectedCar), Encoding.UTF8, "application/json");
var req = await httpClient.PostAsync(uri, content, ct);
var response = await req.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<IEnumerable<Car>>(response);
}
}
我怎样才能准备好这两件事才能让它发挥作用?
解决方案
只需将您的代码更改为 return void
。ASP.NET 足够聪明,只要200 OK
没有从 void 方法抛出异常就发送。
[HttpPost]
[Route("api/[controller]/[action]")]
public void UpdateOperation(Car car)
{
_carRepository.UpdateOperation(car) //UpdateOperation is void with try/catch - throw;
}
要使您的调用代码正常工作,您不需要从服务器接收 HTTP 响应消息以外的任何内容。即使您的方法返回void
,HTTP 服务器仍会发送状态代码(200、500 等)和一些标头供您检查。
尝试这个:
public async Task UpdateCar(Car selectedCar, CancellationToken ct)
{
var uri = new Uri($"{_webApiUrl}Car/UpdateOperation");
using (var httpClient = new HttpClient())
{
HttpContent content = new StringContent(JsonConvert.SerializeObject(selectedCar), Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync(uri, content, ct);
if (response.IsSuccessStatusCode)
{
return;
}
else
{
// handle error
}
}
}
推荐阅读
- sql - SQL Server:.- 按 ID 的 SUM 对多列进行分组
- vue.js - Vue - 无效或意外的令牌
- ssh - 使用 SSH 将整个文件夹从服务器移动到另一个服务器
- react-native - 如何通过 React-Native 中的异步存储使用 JWT 令牌保存用户 ID 和密码
- php - 调用字符串上的成员函数 getClientOrginalName()
- java - java浮点格式说明符
- html - 为什么当我在 li 菜单的 id 中添加斜杠时动画不起作用?
- excel - 使用带有 sheet.name 的不同工作表的单元格公式
- ios - 缺少必需的模块“libtesseract libleptonica”
- ruby - 如何从代码中守护 ruby 服务器?