首页 新闻 会员 周边

MVC中防止重复提交的方法

0
悬赏园豆:80 [已解决问题] 解决于 2014-12-02 10:20

使用的是 mvc中model验证
按钮提交,先验证,验证通过然后提交给服务器,但是这样会造成重复提交的漏洞,我打算在页面上,当验证通过后给当前的按钮设置为不可用,该怎么办?
求指导..

亮亮7550的主页 亮亮7550 | 初学一级 | 园豆:107
提问于:2014-11-27 20:56
< >
分享
最佳答案
0
 public class PlatformActionFilter : FilterAttribute, IActionFilter
    {
        public PlatformActionFilter()
        {
            
        }

        string hiddenToken = "hiddenToken";
        public void OnActionExecuting(ActionExecutingContext filterContext)
        {
            string httpMethod = filterContext.RequestContext.HttpContext.Server.HtmlEncode(filterContext.RequestContext.HttpContext.Request.HttpMethod);

            if (httpMethod == "POST")
            {
                // page token 
                // hiddenToken
                string cacheToken = filterContext.HttpContext.Request[hiddenToken];
                //filterContext.HttpContext.Request.IsAjaxRequest()
                if (cacheToken != null)
                {
                    if (System.Web.HttpContext.Current.Cache[cacheToken] == null)
                    {
                        System.Web.HttpContext.Current.Cache.Insert(cacheToken, cacheToken, null, DateTime.MaxValue, TimeSpan.FromSeconds(1));
                        LogHeper.Instant.log.Info("提交成功!");
                    }
                    else
                    {
                        LogHeper.Instant.log.Info(filterContext.HttpContext.Request.Url + "请不要重复提交!");
                        throw (new GLRISCRMException("请不要重复提交!"));
                    }
                }
            }
        }
        public void OnActionExecuted(ActionExecutedContext filterContext)
        {
        }
    }

 

@Html.Hidden("hiddenToken", new Guid().ToString() + DateTime.Now.Ticks)


 

收获园豆:20
小眼睛老鼠 | 老鸟四级 |园豆:2731 | 2014-12-01 19:14
其他回答(10)
0

重定向/禁止提交按钮 等以前对 asp.net webform 的都适用

FYI

http://www.cnblogs.com/wintersun/archive/2012/03/10/2389084.html

Yu | 园豆:12980 (专家六级) | 2014-11-27 21:12

这个帖子我看了,添加的东西太多了,我想简单点。

支持(0) 反对(0) 亮亮7550 | 园豆:107 (初学一级) | 2014-11-28 09:30

@亮亮7550: 

   $.ajax({
            type: "post",
            url: ...,
            data:..,
            success: function (json) {
             
                window.location.href = ...;
            }
        });

那就只能用这了

支持(0) 反对(0) Yu | 园豆:12980 (专家六级) | 2014-11-28 13:26
0

用jquery对按钮事件只绑定一次

羽商宫 | 园豆:2490 (老鸟四级) | 2014-11-27 22:24

能举个简单例子吗?

支持(0) 反对(0) 亮亮7550 | 园豆:107 (初学一级) | 2014-11-28 09:44

@亮亮7550: http://api.jquery.com/one/这里

支持(0) 反对(0) 羽商宫 | 园豆:2490 (老鸟四级) | 2014-11-28 14:19
1

不关MVC的事,是你的业务事务没管理好。

吴瑞祥 | 园豆:29449 (高人七级) | 2014-11-28 09:13
0

你会哪种防止重复提交的方法都可以用

刘宏玺 | 园豆:14020 (专家六级) | 2014-11-28 09:18
1

首先你要明白,重复提交表单和mvc没有关系。是你的业务逻辑代码控制着他。你最好描述清楚!

Mr.Brian | 园豆:1518 (小虾三级) | 2014-11-28 09:22
1

1、禁用按钮

2、设置标识

3、使用延时,第二次请求在一定时限内释放第一次请求

收获园豆:30
幻天芒 | 园豆:37175 (高人七级) | 2014-11-28 09:22

禁用后就不请求了啊!一次都点击不了。

支持(0) 反对(0) 亮亮7550 | 园豆:107 (初学一级) | 2014-11-28 09:50

@亮亮7550: 点击一次之后,禁用按钮...呵呵~

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2014-11-28 10:35

@幻天芒: 你说的是用 js事件吗?

支持(0) 反对(0) 亮亮7550 | 园豆:107 (初学一级) | 2014-11-28 13:41

@亮亮7550: 是哇。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2014-11-28 14:08
0

 jiebang

酸番茄 | 园豆:87 (初学一级) | 2014-11-28 14:56
0

验证后 禁用按钮

收获园豆:30
单恋 | 园豆:678 (小虾三级) | 2014-11-28 15:56
0

使用token验证 (令牌) 

漫步去旅游 | 园豆:204 (菜鸟二级) | 2014-11-28 16:31
0

点击提交时,按钮隐藏

小安妮的熊 | 园豆:202 (菜鸟二级) | 2014-11-28 21:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册