首页 > 解决方案 > 如果另一个 API 调用当前在 ASP.NET Core 中运行,则拒绝 API 调用

问题描述

我正在编写一个对数据库执行大量操作的 API,包括截断一些表,然后插入一些记录。API 不是供最终客户使用的,它只是用来为一些系统测试准备数据库的东西。但是,它可能会被意外调用两次。

如果在同一端点上已经有另一个请求正在服务,是否有某种方法可以拒绝某个控制器端点的 API 调用(比如说返回 4xx)?

标签: c#restasp.net-core

解决方案


假设只有一个服务器处理 API,您可以在控制器内使用 Mutex 和以下代码:

using (var mutex = new System.Threading.Mutex(false,
    "Global\\{7B28AF1F-AB08-4A11-B109-0E58F40B23D4}")); // Replace GUID with your own
{
    if (!mutex.WaitOne(0, false))
    {
        return new ConflictResult(); // 409
    }
    // Do stuff here
}

推荐阅读