gpt4 book ai didi

c# - 防止多重请求 - WebAPI

转载 作者:太空宇宙 更新时间:2023-11-03 22:58:02 24 4
gpt4 key购买 nike

我有下一个问题我有用户。用户在数据库中有列 - 票证。 - 门票是内部货币。现在当用户点击网站购买 - 我去 webapi===> BL(类库)

我从 DB 获取用户 - 检查他是否有票,如果是 - 我按照我的逻辑(然后我去 DAL - 并放下这个计数器)。

问题是 - 如果我在网站上点击“购买”按钮——那么快——我可以购买两次。

示例

用户有1张票

他想买东西——1张票

用户快速点击 BUY 按钮 2 次

1 个请求转到 WebApi ==> 转到 BL ==> Bl 从数据库中获取 DAL 用户并检查他是否有 Ticket --- 是的他有 ===> 做逻辑并将 Ticket 计数器设置为 0

2 个请求转到 WebApi ==> 转到 BL ==> Bl 从数据库中获取 DAL 用户并检查他是否有 Ticket --- 是的他有 这里是问题 ===> 做逻辑并把售票柜台为0

所以我不知道如何防止这个错误......或者如何更好地为此重新制作数据库结构?

最佳答案

您需要以这样一种方式更改您的更新逻辑,即多个并发更新中只有一个会成功。

例如,如果您的数据库表有 TicketIdTicketCount 字段,您会看到您还有 n 票,并且您想减少票的数量,而不是这样做

UPDATE Ticket
SET TicketCount=@NewTicketCount
WHERE TicketId=@TicketId

这样做:

UPDATE Ticket
SET TicketCount=@NewTicketCount
WHERE TicketId=@TicketId AND TicketCount=@OldTicketCount

当您从多个线程同时运行第二个更新时,只有一个会成功,更新一行。所有其他线程都会看到此请求更新零行。他们应该将其视为失败的指示,并将相应的状态码返回给Web API的调用者。

I'm using EF 6.0

那你就靠EF 6 implementation of optimistic concurrency了,它会自动为您执行类似的操作。

关于c# - 防止多重请求 - WebAPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44464562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com