.net core 对http POST 处理时的参数传递

一般分3种

1.Body,  一般用于传递复杂一点的json数据

服务器端:

        [HttpPost] 
        public  IActionResult Fill([FromBody] dynamic data)
        {
             string a=data.amount;
        }

只能接收一个参数,无法把json分解成多个参数,也许是因为json里可能包含多层数据。必须使用[FromBody]才能解析出来。

这里的dynamic可以换成一个具体的类

JS:

        var data = { 
           amount: 10, 
           name: 'liu min'
        };
        $.ajax({
            url: '/FillMoney/Fill',
            type: 'POST',
            contentType: 'application/json',
            data: JSON.stringify(data),
            success: function (data) {

             }
         });

2.Form 方式下传递字拼接的符串a=1&b=2&c=3

服务端: 有三种写法

//写法1     
  [HttpPost] 
        public IActionResult Fill([FromForm] Pay data)//这里不能用dynamic,必须指定类型
        { 
            string a = data.amount; 
            return Content("OK");
        }
       .....
        public class Pay{

            public string amount{get;set;}
            //public string amount;//这样是错误的,会娶不到值,必须定义成属性
            public string name{get;set;}
          }
        ........
//写法2    
      [HttpPost] 
        public IActionResult Fill(string amount)//这里的参数名称必须和调用方一致
        { 
            string a = amount; 
            return Content("OK");
        }
//写法3    
      [HttpPost] 
        public IActionResult Fill() 
        {  
            string a = Request.Form['amount']; //用这种方式更方便,不需要定义一个类
            return Content("OK");
        }
      

错误写法:

[HttpPost] 
        public IActionResult Fill([FromBody] Pay data)
        { 
            string a = data.amount; 
            return Content("OK");
        }

这种写法调用方会收到415错误 

JS:

        var data = 'amount=10&name=liu min';//拼接字符串
        };
        $.ajax({
            url: '/FillMoney/Fill',
            type: 'POST',
            contentType: 'application/x-www-form-urlencoded',
            data: data,
            success: function (data) {

             }
         });

3.FORM 方式下传XML

 

后台:

[HttpPost] 
        public IActionResult Fill()//这里不能有参数,一旦有参数了,Request.Body就会被读取,而Request.Body只能被读取一次,后面就无法再读了
        { 
             string body = new StreamReader(Request.Body).ReadToEnd();
              //解析body中的XML
            return Content("OK");
        }

注意:这里不能有参数,一旦有参数了,Request.Body就会被读取,而Request.Body只能被读取一次,后面就无法再读了

Request.Body存放的是请求原始数据,一旦设置参数就会从Body里取数据。

JS:

        var data = 'ok';//拼接字符串
        };
        $.ajax({
            url: '/FillMoney/Fill',
            type: 'POST',
            contentType: 'application/x-www-form-urlencoded',
            data: data,
            success: function (data) {

             }
         });

 

 

你可能感兴趣的:(开发感悟)