在我的应用程序中,我通过rest api公开了一些功能(使用服务堆栈,但这并不重要)。
目前我想知道哪种是暴露 concurency exception
的最佳方式从存储库层收到的问题。设想:
有人想从我的 api 获取一些数据,例如:
api/orders/1
问题是同时其他人删除了给定 ID 的订单。
Entity Framework
抛出concurency exception
,我可以在 api 层捕获它,但是我应该返回什么?一些不寻常的 http 错误或者什么?或者也许有一个好的做法来处理它?</p>
最佳答案
您可以注册Custom Exception Mapping将 C# 异常映射到 HTTP 状态代码,例如:
SetConfig(new HostConfig {
MapExceptionToStatusCode = {
{ typeof(CustomInvalidRoleException), 403 },
{ typeof(CustomerNotFoundException), 404 },
}
});
如果订单不再存在,您可以返回 404 NotFound
以指示实体不再存在。对于其他冲突,您可以返回 409 Conflict
来指示与实体的当前状态存在冲突,否则,如果您不这样做,则通用 400 Bad Request
是合适的期望消费者采取具体行动并重播请求以解决他们这边的冲突。
关于c# - 如何正确处理并发异常并通过服务堆栈公开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39107631/