【发布时间】:2021-06-22 09:41:13
【问题描述】:
我有一个 .NET 应用程序,其中有一个用于接收用户请求的控制器,一个服务 Service 1 调用另一个服务 Service 2。
我在Service 2 中有一些代码,我在其中查询数据库(DynamoDB)并在用户请求值不正确时得到 500 错误响应。我想处理这个问题,以便我捕捉到这个错误/异常并将错误消息与 400 状态代码一起从控制器发送回用户。我应该如何修改代码来做到这一点?
这是我尝试过的。目前,我只是在Service 1 中打印错误,但我需要将其发送给控制器。通过沿途抛出异常将错误消息发送到控制器是否正确?
以下代码与实际代码类似
控制器:
[HttpGet]
[Authorize(Policy = "Read-Entity")]
[Route("byParams/{param1}/{param2}")]
[Produces(typeof(DynamoResult<EntityResponse>))]
public async Task<IActionResult> ListByParams([FromQuery] DynamoQuery entityQuery)
{
try
{
return await HandleRequest(async () =>
{
return Ok((await _entityStore.ListByParams(entityQuery)));
});
}
catch (Exception e)
{
return BadRequest(e.Message);
}
}
服务 1:
public async Task<DynamoResult<EntityResponse>> ListByParams(DynamoQuery entityQuery)
{
results = new DynamoResult<Entity>();
try {
results = await GetPagedQueryResults(entityQuery);
}
catch (Exception e) {
Console.WriteLine(e);
}
return new DynamoResult<EntityResponse>
{
Data = results.Data.Select(_mapper.Map<EntityResponse>).ToList(),
};
}
服务 2:
private async Task<DynamoResult<TResponse>> GetPagedQueryResults(DynamoQuery query)
{
var results = new List<Document>();
try{
results = await search.GetNextSetAsync();
}
catch(Exception e){
throw new PaginationTokenException(e.Message);
}
return results;
}
[Serializable]
public class PaginationTokenException : Exception
{
public PaginationTokenException() { }
public PaginationTokenException(string message)
: base(message) {
throw new Exception(message);
}
public PaginationTokenException(string message, Exception inner)
: base(message, inner) { }
}
【问题讨论】:
标签: c# .net error-handling amazon-dynamodb