C# 如何确保没有人可以两次调用api

C# 如何确保没有人可以两次调用api,c#,C#,我在c#中创建了一个api,其中包含以下参数 现在,如果有人两次调用此api/url,就会出现问题,因为资源被赋予了两次。需要一个解决方案,我如何可以避免重复呼叫 第一个参数是我想给出的资源 第二个参数是身份验证令牌 第三个参数是crcKey,它确保数据不会在传输过程中被篡改。目的是什么 Пrevent客户端通过不断发送请求来加载服务器 根据url只给客户一次回复 解决方案 目的1。最简单的方法是在获取前一个请求的响应之前拒绝客户端上的发送请求 如果需要在服务器端解决此问题,您应该创建字典。当

我在c#中创建了一个api,其中包含以下参数

现在,如果有人两次调用此api/url,就会出现问题,因为资源被赋予了两次。需要一个解决方案,我如何可以避免重复呼叫

第一个参数是我想给出的资源 第二个参数是身份验证令牌 第三个参数是crcKey,它确保数据不会在传输过程中被篡改。

目的是什么

  • Пrevent客户端通过不断发送请求来加载服务器
  • 根据url只给客户一次回复
  • 解决方案

    目的1。最简单的方法是在获取前一个请求的响应之前拒绝客户端上的发送请求

    如果需要在服务器端解决此问题,您应该创建字典
    。当服务器端接受请求时,将标志设置为false。当服务器发送响应时,将标志设置为true。若服务器接受请求并且标志为false,那个么服务器将拒绝请求(发送带有错误的响应或其他关于需要获取前一个响应的指示)

    您可以将此词典保存在
    内存缓存中

    目的2。我曾经遇到过这样的情况,即只需要为某个文件的一次下载生成链接。然后我用记号创建了集合。当我创建下载链接时,我将令牌添加到集合中。当我接受请求时,我将令牌从集合中移除。若有人再次向我发送请求(使用相同的令牌),那个么我在集合中找不到它并发送错误响应


    如果链接的生存期(在我的例子中)足够短,那么您可以在
    MemoryCache
    中使用令牌保存集合。如果链接的生命周期足够长(超过24小时),那么我建议将此集合保存在数据库中。

    在第一次请求后使令牌无效如何?无论您在应用程序中维护了
    令牌
    ,都要保留另一个标记。第一次点击make it
    false
    后,在发出时将令牌添加到类型为的字典中,将bool值设置为true。在GrantResource中,检查字典中的真值-第一次使用令牌时,执行查找并将布尔值设置为false。每增加一次,执行相同的操作,但返回一个错误。