asp.net mvc 加layui,及中途出现的问题

1.layui下载及导入

官网:图标 - Layui 文档

根据步骤即可

加载样式:

 <script>
     layui.use(['element', 'layer', 'util'], function () {
         var element = layui.element;
         var layer = layui.layer;
         var util = layui.util;
         var $ = layui.$;
     });

 </script>

传值:

<script>

layui.use(function(){
  var form = layui.form;
  var layer = layui.layer;
  // 提交事件
  form.on('submit(demo-login)', function(data){
    var field = data.field; // 获取表单字段值
    // 显示填写结果,仅作演示用
    layer.alert(JSON.stringify(field), {
      title: '当前填写的字段值'
    });
    // 此处可执行 Ajax 等操作
      $.ajax({
          type: "post",
          data: {
              'kglx': field
          },
          url: "http://localhost:25034/Home/Login2",
          error: function (XMLHttpRequest, textStatus, errorThrown) {
              alert("执行失败了!");
              alert(XMLHttpRequest.status);
              alert(XMLHttpRequest.readyState);
              alert("textStatus");

          },
          success: function (data) {
              alert("成功啦?");
          }

      });

    return false; // 阻止默认 form 跳转
  });

 </script>

     2.mvc

传值:

 public ActionResult Login2(string username,string password)
 {
    
     Console.WriteLine(username + password);
     if (username=="12"&&password=="1234")
     {
         return Json(new
         {
             Sucess = true,
             Message = "登录成功"
         }, JsonRequestBehavior.AllowGet);
     }
     return View();
 }

3.问题

1. System.InvalidOperationException: 此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站。若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet。

解法:

原文链接:解决"此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站"的问题 - 五粮液和 - 博客园 (cnblogs.com)

其实从返回的这个错误信息我们已经可以知道解决方法了,看这个信息:”因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站“,说明我们只要使用POST请求就可以了。后面的 “若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet”,这是提示第二种解决方法,就是设置JSON结果对象使其允许来自客户端的 HTTP GET 请求。以下为具体解决方法:

方法一 使用POST请求来调用控制器,从而获取JSON数据

原来发送ajax请求的前台JS代码如下: 

    /*可以看到type 设置的是GET请求*/
    $.ajax({
        type:'GET',
        url: '/Home/AjaxGetJsonData',            
        success: function (data) {
            alert(data);
        },
        error: function (error) {                
            alert(error.responseText);
        }
    });

或者

    $.get('/Home/AjaxGetJsonData', null, function (data) {
        alert(data);
    });

更改为: 

  /*这里更改了ajax的参数 type 为POST ,发送POST请求就不会报错了*/
    $.ajax({
        type: 'POST',
        url: '/Home/AjaxGetJsonData',
        success: function (data) {
            alert(data);
        },
        error: function (error) {
            alert(error.responseText);
        }
    });

或者

    /*也可以直接使用$.post方法进行ajax调用*/
    $.post('/Home/AjaxGetJsonData', null, function (data) {
        alert(data);
    });

方法二 在控制器返回的JSON结果对象里,设置JsonRequestBehavior.AllowGet(允许来自客户端的 HTTP GET 请求)

原来控制器中的代码如下:

 public ActionResult AjaxGetJsonData()
    {
        string strData = "测试数据";
        return Json(strData);   
    }

更改后的代码如下 :

    public ActionResult AjaxGetJsonData()
    {
        string strData = "测试数据";
        //这里我们设置了第二个参数JsonRequestBehavior为AllowGet
        return Json(strData,JsonRequestBehavior.AllowGet);   
    }

我们可以看到在最后return Json(list, JsonRequestBehavior.AllowGet)中增加了第二个参数JsonRequestBehavior.AllowGet,默认是JsonRequestBehavior.DenyGet。之所以我们要在这里设置允许HTTP GET请求,是因为ASP.NET MVC为了预防一个网站信息泄漏的漏洞,所以默认是禁止客户端的HTTP GET 请求的。这是一个很出名的漏洞,名字是:JSON 劫持漏洞,所以我建议AJAX还是使用POST请求来获取数据,防止重要的信息被恶意攻击者窃取。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值