https://izen.live/Blog/info/13.html

/// <summary>
/// action方法过滤器
/// </summary>
public class PlatformActionFilter : Attribute, IActionFilter
{private static MemoryCache cache = new MemoryCache(new MemoryCacheOptions());public const string hiddenToken = "hiddenToken";private ILog _log;public PlatformActionFilter(){this._log = LogManager.GetLogger(Startup.Repository.Name, typeof(PlatformActionFilter));}public void OnActionExecuted(ActionExecutedContext context){}/// <summary>/// action 执行之前/// </summary>/// <param name="context"></param>public virtual void OnActionExecuting(ActionExecutingContext filterContext){string httpMethod = WebUtility.HtmlEncode(filterContext.HttpContext.Request.Method);if (httpMethod == "POST"){//使用请求路径作为唯一keystring path = filterContext.HttpContext.Request.Path;string cacheToken = $"{hiddenToken}_{path}";string keyValue = new Guid().ToString() + DateTime.Now.Ticks;if (path != null){//var cache = iZen.Utils.Core.iCache.CacheManager.GetCacheValue(cacheToken);var cv = cache.Get(cacheToken);if (cv == null){//iZen.Utils.Core.iCache.CacheManager.SetChacheValueSeconds(cacheToken, keyValue, 1);//设置缓存1秒过期cache.Set(cacheToken, keyValue, new MemoryCacheEntryOptions() { SlidingExpiration = TimeSpan.FromSeconds(1) });_log.Info($"提交成功");}else{_log.Error($"{filterContext.HttpContext.Request.Method},请不要重复提交");//设置了 filterContext.Result 表示返回过滤失败的结果//filterContext.Result = new BadRequestObjectResult(filterContext.ModelState);filterContext.Result = new BadRequestObjectResult("请不要重复提交");}}return;}this.OnActionExecuting(filterContext);}}

action上添加过滤器特性

/// <summary>
/// 测试重复提交过滤器
/// </summary>
/// <returns></returns>
[PlatformActionFilter]
[HttpPost]
public JsonResult TestPost()
{var result = new ResultModel() { IsSuccess = true, Info = "测试重复提交" };return Json(result);
}

转载于:https://www.cnblogs.com/zinan/p/10491336.html

webapi 重复提交问题相关推荐

  1. .net core 中如何有效屏蔽重复提交

    咨询区 Guilherme Ferreira: 我通过 post 方式向我的一个webapi中提交数据,然后插入到数据库中,在 ui端,当用户点击某一个 button 之后,代码会将 button 禁 ...

  2. Spring AOP + Redis解决重复提交的问题

    Spring AOP + Redis解决重复提交的问题 用户在点击操作的时候,可能会连续点击多次,虽然前端可以通过设置按钮的disable的属性来控制按钮不可连续点击,但是如果别人拿到请求进行模拟,依 ...

  3. 后端怎么防止重复提交?(常用的做法)

    后端怎么防止重复提交?(常用的做法) 客户端的抖动,快速操作,网络通信或者服务器响应慢,造成服务器重复处理.防止重复提交,除了从前端控制,后台也需要控制.因为前端的限制不能解决彻底.接口实现,通常要求 ...

  4. springboot 订单重复提交_Spring Boot (一) 校验表单重复提交

    一.前言 在某些情况下,由于网速慢,用户操作有误(连续点击两下提交按钮),页面卡顿等原因,可能会出现表单数据重复提交造成数据库保存多条重复数据. 存在如上问题可以交给前端解决,判断多长时间内不能再次点 ...

  5. 防止重复提交订单-(转)

    防止重复提交 Button1.Attributes.Add("onclick",   "this.value='正在提交中,请等待--';this.disabled=tr ...

  6. 34.TokenInterceptor防止表单重复提交

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 由于某些原因,用户在进行类似表单提交的操作后,以为表单未被提交,会进行多次的 ...

  7. SpringMVC中实现的token,防表单重复提交

    一:首先创建一个token处理类  ,这里的类名叫 TokenHandler private static Logger logger = Logger.getLogger(TokenHandler. ...

  8. 8种方案解决重复提交问题

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:锦成同学 链接:juejin.im/post/5d31928 ...

  9. 8种方案解决重复提交问题!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 本文来源:juejin.im/post/5d31928c51882 ...

最新文章

  1. linux里引号注意点
  2. mac php 连接mysql数据库_Mac环境下php操作mysql数据库的方法分享
  3. delphi 中的dll编程注意事项
  4. c语言判断用户名重负,判定方阵的正定负定在C语言中写法.docx
  5. SpringBoot项目使用微服务后在Service窗口启动应用后不显示端口号
  6. 无法定位程序输入点 except_软件测试中的功能测试点(三)
  7. java中的页面:JSP(已过时)
  8. Solr如何管理索引库
  9. [JavaScript]高效 JavaScript
  10. Java进阶之路,技术要点
  11. Python游戏开发平台、脚本系统架构设计
  12. 使用后处理Alpha通道丢失的问题
  13. 直接插入法(C语言版本)
  14. 一个经济学果粉对国内iOS游戏厂商的5点斥责和5个建议
  15. 关于小程序上传图片到服务器
  16. 可微硬件:AI将如何重振摩尔定律的良性循环
  17. oracle客户端插件,oracle instantclient_11_2插件安装
  18. linux模拟手机号码,虚拟手机号码接收短信
  19. 乖离率背离公式_乖离率多少才合理 BIAS指标计算公式-BIAS-技术指标-股票入门基础知识学习网...
  20. 列表元组和字典课后练习

热门文章

  1. 人工智能:从单细胞生物的智能说起
  2. ubuntu两个conda安装和切换
  3. Apache Sentry 第一弹:Server启动、连接Hue、分组详解
  4. 给网站外链进行重定向跳转
  5. 25_android下文件访问的权限
  6. nfs挂载hdfs,实现云存储
  7. 文档转换html6,html学习文档-6、HTML 文本格式化(示例代码)
  8. [Python] L1-026. I Love GPLT-PAT团体程序设计天梯赛GPLT
  9. 【软件体系结构】考点整理
  10. vue 前端png转pdf_Vue前端HTML保存为PDF的两种常用方式 「干货分享」