序列化来自数据库客户端的异步响应



我有一个用于创建项的端点。控制器调用创建项的服务,对数据库进行一些更改,数据库根据过程返回数据。db返回一个类似json的响应,但并不总是相同的,所以我必须在后端进行调整,以便正式化响应类型。

问题是创建项服务是异步的,我需要能够等待响应,这样我就可以在此基础上做出新的响应。我如何才能等待来自db客户端的响应,然后在此基础上返回数据。

这是我的操作,我希望能够序列化来自服务的异步响应

[HttpPost]
public IActionResult CreateItem([FromBody] InputModel item)
{
var jsonString = _itemService.CreateItem(item);
ResponseModel? response = JsonSerializer.Deserialize<ResponseModel>(jsonString);
return new ObjectResult(response.Response) { StatusCode = response.StatusCode };
}

默认响应模型

public class ResponseModel
{
public string Response { get; set; }
public int StatusCode { get; set; }
}

创建Item服务,它向客户端发出post请求,并且必须是异步的。根据来自客户端的状态代码,我希望能够设置我的操作状态代码。

public async Task<string> CreateItem(InputModel item)
{
if (item.VersionType != 1)
{
return new { Response = "Incorrect data", StatusCode = 400 }.ToString()!;
}
var json = JsonSerializer.Serialize(item);
var data = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, data);
var content = await response.Content.ReadAsStringAsync();
return content;
}

您可以使您的操作方法asyncawait为其调用_itemService.CreateItem的方法:

[HttpPost]
public async Task<IActionResult> CreateItem([FromBody] InputModel item)
{
var jsonString = await _itemService.CreateItem(item);
ResponseModel? response = JsonSerializer.Deserialize<ResponseModel>(jsonString);
return new ObjectResult(response.Response) { StatusCode = response.StatusCode };
}

现在,您的操作方法将异步等待CreateItem的结果,当它返回结果时,它将继续执行,并将反序列化的响应发送回客户端。

最新更新