C# 快速单击“提交”按钮时,服务器验证未按预期工作

C# 快速单击“提交”按钮时,服务器验证未按预期工作,c#,asp.net-core,asp.net-web-api,C#,Asp.net Core,Asp.net Web Api,我正在检查.netcore webapi项目中服务器函数中的重复名称验证,但当从UI快速单击“保存”按钮时,服务器处理并行请求并在数据库中输入相同的名称。我知道这可以避免在数据库中设置约束,但有没有其他解决方案,因为当我们在服务器中处理一个巨大的逻辑验证时,在保存其他函数之前,同样的情况也会发生 public async Task<ReturnMessageMain> Create(CreateOrEditMainCategoryDto input) {

我正在检查.netcore webapi项目中服务器函数中的重复名称验证,但当从UI快速单击“保存”按钮时,服务器处理并行请求并在数据库中输入相同的名称。我知道这可以避免在数据库中设置约束,但有没有其他解决方案,因为当我们在服务器中处理一个巨大的逻辑验证时,在保存其他函数之前,同样的情况也会发生

public async Task<ReturnMessageMain> Create(CreateOrEditMainCategoryDto input)
        {
            if (_mainCategoryRepository.GetAll().Where(x => x.MainGroup == input.MainGroup.Trim()).Count() > 0)
            {
                throw new UserFriendlyException("Main Category already exists");
            }

            var mainCategory = ObjectMapper.Map<MainCategory>(input);


            int id = await _mainCategoryRepository.InsertAndGetIdAsync(mainCategory);

            if (id > 0)
            {
                return new ReturnMessageMain()
                {
                    Id = id,
                    Code = input.MainGroupCode,
                    Message = "Saved Successfully"

                };

            }
            else
            {
                return new ReturnMessageMain()
                {
                    Id = 0,
                    // Code = input.MainGroupCode,
                    Message = "Please try again"

                };
            }
        }
公共异步任务创建(CreateOreDitMainCategoryTo输入)
{
if(_mainCategoryRepository.GetAll().Where(x=>x.MainGroup==input.MainGroup.Trim()).Count()>0)
{
抛出新的UserFriendlyException(“主类别已存在”);
}
var maincegory=ObjectMapper.Map(输入);
int id=await_mainCategoryRepository.InsertAndGetIdAsync(maincodel);
如果(id>0)
{
返回新的ReturnMessageMain()
{
Id=Id,
代码=input.MainGroupCode,
Message=“保存成功”
};
}
其他的
{
返回新的ReturnMessageMain()
{
Id=0,
//代码=input.MainGroupCode,
Message=“请重试”
};
}
}

当用户多次单击“保存”按钮,然后多次调用“创建”功能时,这会导致问题,我们可以禁用“提交”按钮,但这只是客户端的一种方法,我们如何从服务器端处理此问题,即使有办法在单台服务器级别停止此操作,考虑一组独立的应用服务器,其中每个并行请求由不同的服务器处理。唯一可靠的解决方案是数据库中的唯一约束。您可能需要查看.NETFramework提供的<代码>锁< /COD>语句。我们在电子商务站点@ Wikor ZyChLA中使用它,但是考虑到检查数据库中的项目的情况,那么我们如何处理这个问题呢?您应该在服务器端和客户端100%检查这个问题,这样即使用户点击按钮并绕过JS验证,服务器也会捕获它并返回相应的错误。@scgough我正在签入服务器,但问题是并行请求。