问题 需要反馈

Raysefo

知名会员
已加入
2019年2月22日
留言内容
194
编程经验
10+
你好,

我有一个Web API,它调用了第三方API。客户希望我根据终端(商店中的收银机)设置每日销售限额。我正在AuthorizationFilterAttribute中计算当前的总销售额。客户可以购买11种不同的商品。在请求中,我正在获取商品代码,没有价格。来自第三方API的价格回报。为了正确地基于终端计算每日总销售额,我必须知道当前请求的价格。现在,我可以添加if语句,但是它是不可管理的。我可以创建一个表,其中添加商品代码及其价格,但仍然不是那么优雅。此外,我将再去一次DB。我不知道如何解决,您有什么建议?

最好的祝福。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,539
地点
悉尼,澳大利亚
编程经验
10+
我正在AuthorizationFilterAttribute中计算当前的总销售额。
一开始这似乎很奇怪。该属性的目的是确定呼叫者是否被授权进行呼叫。如果是,则允许该调用,并且应该是被调用的方法才能进行工作并返回数据。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,560
地点
弗吉尼亚州切萨皮克
编程经验
10+
回忆他的 其他线程。他的客户每天都有交易限额。他正在使用授权过滤器,以防止客户端在达到其限制时发出进一步的请求。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,560
地点
弗吉尼亚州切萨皮克
编程经验
10+
我的建议就像是纵深防御方法。
第一层是在数据库中有一个简单的表,该表只有两列:客户端ID和每日总数。该表包含客户当天成功完成的实际交易总数。显然,您将需要某种后台任务来每天清理表。您的授权过滤器将只检查该数据库以进行快速检查,以查看客户端是否超出其限制(或者,如果您对每笔交易都有已知的固定成本,则将很快超过其限制)。这里不需要做任何缓慢或复杂的事情。

第二层实际上是开始为所请求的事务执行计算。这可能包括您用于查找波动的每日价格的复杂逻辑。如果此当前事务的总和加上第一层正在使用的数据库中的当前总数,则返回未授权的错误代码。如果总和仍低于限制,则结束事务,然后更新第一层使用的数据库,最后返回客户端请求的结果。

所以是的,这是一个问题,即客户端几乎快要达到极限了,但还远远没有达到极限,因此他们继续进入需要完成更多工作的第二层。您可能会在第二层中实现一些缓存,这样,如果看到相同的客户端和相同的事务请求,则可以绕过许多数据库查找和计算。如果他们继续快速尝试,希望这将触发您的反DOS和反DDOS检测,并且您可以开始限制/过滤来自该客户端的请求。 (您确实计划使用/构建反DOS和反DDOS保护,对吗?)
 
最佳 底部