webapi 参数传递详解

Posted shya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webapi 参数传递详解相关的知识,希望对你有一定的参考价值。

原因

经常有朋友遇到webapi参数传递问题,自己也碰到过一些坑,在此记录下正确的姿势,简单参数传递相信没有人会有问题,容易出现问题的是对象参数和表单参数。

1、WebApi5.2.3有FromBody和无FromBody

 控制器代码如下:

 public class ValuesController : ApiController
    {
        // POST api/values
        [HttpPost]
        [Route("~/api/Values/Post")]
        public UserModel Post(UserModel value)
        {
            return value;
        }
        [HttpPost]
        [Route("~/api/Values/Put")]
        // PUT api/values/5
        public UserModel Put([FromBody]UserModel value)
        {
            return value;
        }
    }

    public class UserModel
    {
        public string UserName { get; set; }

        public string Password { get; set; }
    }

 

对应的JS请求代码如下,对于有FromBody的Put请求来说,两种请求方式都是可以的:

<script type="text/javascript">

        $(function () {

            $(‘#btnPost‘).click(function () {
                $.ajax({
                    url: ‘/api/Values/Post‘,
                    data: {
                        UserName: ‘Admin‘,
                        Password: ‘123456‘
                    },
                    method: ‘POST‘,
                    dataType: ‘json‘
                }).done(function (result) {
                    $(‘#txtPost‘).val(JSON.stringify(result));
                })
            })
            $(‘#btnPostFromBody‘).click(function () {

                $.ajax({
                    url: ‘/api/Values/Put‘,
                    data: {
                        UserName: ‘Admin‘,
                        Password: ‘123456‘
                    },
                    method: ‘POST‘,
                    dataType: ‘json‘
                }).done(function (result) {
                    $(‘#txtPostFromBody‘).val(JSON.stringify(result));
                    })

                $.ajax({
                    url: ‘/api/Values/Put‘,
                    data: JSON.stringify({
                        UserName: ‘Admin‘,
                        Password: ‘123456‘
                    }),
                    method: ‘POST‘,
                    dataType: ‘json‘,
                    contentType: ‘application/json‘
                }).done(function (result) {
                    $(‘#txtPostFromBody‘).val(JSON.stringify(result));
                })
            })

        })

 

有图有真相

技术分享图片

 

2、Asp .Net Core 有FromBody和无FromBody

服务端代码如下:

public class ValuesController : Controller
    {
        // POST api/values
        [HttpPost]
        [Route("~/api/Values/Post")]
        public UserModel Post(UserModel value)
        {
            return value;
        }
        [HttpPost]
        [Route("~/api/Values/Put")]
        // PUT api/values/5
        public UserModel Put([FromBody]UserModel value)
        {
            return value;
        }
    }

    public class UserModel
    {
        public string UserName { get; set; }

        public string Password { get; set; }
    }

js请求代码有所不同,FromBody不再提供兼容支持 只能采用application/json方式提交:

 $(‘#btnPost‘).click(function () {
                $.ajax({
                    url: ‘/api/Values/Post‘,
                    data: {
                        UserName: ‘Admin‘,
                        Password: ‘123456‘
                    },
                    method: ‘POST‘,
                    dataType: ‘json‘
                }).done(function (result) {
                    $(‘#txtPost‘).val(JSON.stringify(result));
                })

            })
            $(‘#btnPostFromBody‘).click(function () {

                $.ajax({
                    url: ‘/api/Values/Put‘,
                    data: JSON.stringify({
                        UserName: ‘Admin‘,
                        Password: ‘123456‘
                    }),
                    method: ‘POST‘,
                    dataType: ‘json‘,
                    contentType: ‘application/json‘
                }).done(function (result) {
                    $(‘#txtPostFromBody‘).val(JSON.stringify(result));
                })

            })

调用结果:

技术分享图片

 

3、Asp .Net Core 之From表单

有时候难免有上传文件的需求,对象存储这个嘛有的时候客户不愿意多花钱或者把文件存到别人的服务器上,只能自己存了。为了少点垃圾文件还是和表单一起提交吧。

 

1

1

1

以上是关于webapi 参数传递详解的主要内容,如果未能解决你的问题,请参考以下文章

WebApi 接口参数不再困惑:传参详解

C#进阶系列——WebApi 传参详解

WebApi 接口参数不再困惑:传参详解

C#进阶系列——WebApi 接口参数不再困惑:传参详解

WebApi通过后端调用传递基础类型的参数

一些简单的Post方式WebApi接收参数和传递参数的方法及总结