如何处理正确的concurency excpetion并通过Service Stack公开它?

时间:2016-08-23 17:42:37

标签: c# entity-framework concurrency servicestack

在我的应用程序中,我通过rest api公开了一些功能(使用服务堆栈,但这并不重要)。 目前我想知道哪个是揭示从存储库层收到的concurency exception问题的最佳方式。场景: 有人想从我的api那里得到一些数据:

api/orders/1

问题是,其他人同时删除了具有给定ID的订单。 Entity Framework抛出concurency exception,我能够在api层中捕获它,但我应该返回什么?一些不寻常的http错误或什么?或者也许有一个很好的做法来处理它?<​​/ p>

1 个答案:

答案 0 :(得分:2)

您可以注册Custom Exception Mapping以映射HTTP状态代码的C#例外,例如:

SetConfig(new HostConfig { 
    MapExceptionToStatusCode = {
        { typeof(CustomInvalidRoleException), 403 },
        { typeof(CustomerNotFoundException), 404 },
    }
});

如果订单不再存在,您可以返回404 NotFound以表明该实体不再存在。对于其他冲突,您可以返回409 Conflict以表示与实体的当前状态存在冲突,否则如果您不希望消费者采取特定行动,则通用400 Bad Request是合适的重播解决他们一方冲突的请求。