FormsAuthentication重定向到登录页后参数重复

网站采用MVC框架和FormsAuthentication认证,在认证失效后点击页面表单提交按钮,会自动跳转到根目录web.config所示loginUrl页面,加上参数ReturnUrl,ReturnUrl=目标页路径;

如果采用post方法,则跳转后Form Data丢失,导致系统出错,当然可以做一些错误提示或处理;

http://localhost:49551/SysAdmins/Index?ReturnUrl=%2fStudent%2fGetStudentListByClass

如果采用get方法,系统会把表单数据附加到参数ReturnUrl后,

http://localhost:49551/SysAdmins/Index?ReturnUrl=%2fStudent%2fGetStudentListByClass%3fcs%3d%26ddlClass%3d3&cs=&ddlClass=3

即参数ReturnUrl和cs、ddlClass,其实ReturnUrl中已经包括了后面两个参数;但这并不影响登录成功后跳转,因为会跳转到参数ReturnUrl所示地址,忽略ReturnUrl之后的参数;

登录页异步提交后,前端获取跳转地址:

        function getReturnUrl() {
            var queryParam = window.location.search.split('?')[1].split('&');
            var ReturnUrl;
            for (var i in queryParam) {
                var ele = queryParam[i];
                if (ele.split('=')[0] == 'ReturnUrl') {
                    ReturnUrl = ele.split('=')[1];
                    break;
                }
            }
            return ReturnUrl;
        }

        //登录成功
        if (data == "1") {
            if (window.location.search.length != 0) {
                window.location.href = window.location.origin + decodeURIComponent(getReturnUrl());
            } else {
                window.location.href = '@Url.Content(FormsAuthentication.DefaultUrl)';
            }
        } else {
            $('#ItaInfo').text("用户名或密码错误!");
        };                               

另外,如果表单内有name相同的表单元素,也可以提交,

http://localhost:49551/Student/GetStudentListByClass?cs=&ddlClass=2&cs=

 在后台获取时,Request.QueryString["cs"]=",",即所有值用逗号分隔

posted @ 2020-07-02 18:02  老余的水壶  阅读(310)  评论(0)    收藏  举报