c# - 如何正确处理并发异常并通过服务堆栈公开?

标签 c# entity-framework concurrency servicestack

在我的应用程序中,我通过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/

相关文章:

c# - 如何在 Windows Phone 7 中获取图像高度和宽度问题

c# - 与未存储的列表或数组一起使用时,foreach 循环是否工作得更慢?

c# - asp c# 基本mailto函数

c# - 将类型转换为我的自定义枚举

c# - 在并发数据库更新时锁定 Entity Framework 代码

c# - Entity Framework :Linq查询按原始数据查找条目,但返回对已更改条目的引用

.net - Entity Framework 无法加载指定的元数据资源

concurrency - map()和reduce()适合Go中的并发处理吗?

java - Java EE 应用程序的可扩展性。你会如何处理它?

java - 如何在 Java5 中的 ThreadPoolExecutor 中对核心线程应用超时