Netcore API Ajax防止提交重复数据
    		       		warning:
    		            这篇文章距离上次修改已过444天,其中的内容可能已经有所变动。
    		        
        		                
                为了防止在.NET Core API中通过Ajax提交重复数据,你可以在服务端实施一些措施。以下是一些常见的策略:
- 使用唯一键(如ID或者时间戳)进行并发控制。
- 使用Token机制,在表单中添加Token字段,并在服务端验证。
- 使用Session来跟踪用户的提交状态。
以下是一个简单的示例,使用Token机制来防止重复提交:
首先,在你的AJAX请求中添加Token:
$.ajax({
    type: "POST",
    url: "your-api-endpoint",
    data: {
        key1: 'value1',
        key2: 'value2',
        // ...
        _token: $('input[name="__RequestVerificationToken"]').val()
    },
    success: function(response) {
        // 处理响应
    },
    error: function(xhr, status, error) {
        // 处理错误
    }
});然后,在你的API控制器中验证Token:
using Microsoft.AspNetCore.Antiforgery;
// ...
 
public class YourController : ControllerBase
{
    private IAntiforgery _antiforgery;
 
    public YourController(IAntiforgery antiforgery)
    {
        _antiforgery = antiforgery;
    }
 
    [HttpPost]
    public IActionResult YourActionMethod([FromForm] YourModel model)
    {
        if (!_antiforgery.IsRequestValid(HttpContext))
        {
            // 如果Token无效,返回错误
            return BadRequest("Invalid request.");
        }
 
        // 如果Token有效,处理你的逻辑
        // ...
 
        return Ok("Success");
    }
}在你的视图中,确保你有一个隐藏的输入字段来传递Token:
@using Microsoft.AspNetCore.Antiforgery
@inject IAntiforgery Antiforgery
@{
    var tokenSet = Antiforgery.GetAndStoreTokens(Context);
}
 
<form method="post" action="your-api-endpoint">
    @Html.AntiForgeryHidden()
    <!-- 你的表单字段 -->
</form>这样,每次提交表单时,都会通过Ajax发送一个带有唯一Token的请求。服务端会验证这个Token,如果请求是重复的,它将拒绝该请求。这种方法可以防止因为网络问题或用户的重复点击而导致的数据重复提交问题。
评论已关闭