JavaScript 调用 WebApi 参数传递场景分析

起因

近期使用WebApi过程中总遇到各种参数传递问题,特此总结复习
以下服务示例均为Web Api 2

场景一 Get

  • 服务示例
        // GET: api/TestWebApi
        public IEnumerable Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET: api/TestWebApi/5
        public string Get(string id)
        {
            return "value";
        }
  • 调用示例

小结
若调用中参数未匹配(本例中为注释id),则执行无参方法,输出为(2) ["value1", "value2"]
若调用中参数匹配,则执行有参方法,输出为value

场景二 Post

  • 服务示例
        public class DataModel
        {
            public string code { get; set; }
            public string value { get; set; }
        }

        // POST: api/TestWebApi
        public string Post([FromBody]DataModel dm)
        {
            return "Api捕获参数:" + dm.code + "_" + dm.value;
        }
  • 调用示例
    

JavaScript 调用 WebApi 参数传递场景分析_第1张图片
Post 参数正常获取

小结
Post提交时,常用实体搭配使用,注意保持参数前后台一致即可正常解析

场景三 Post List数组

  • 服务示例
        public class DataModel
        {
            public string code { get; set; }
            public string value { get; set; }
        }

        // POST: api/TestWebApi
        public string Post([FromBody]List dm)
        {
            return "Api捕获参数:" + dm[0].code + "_" + dm[0].value;
        }
  • 调用示例
        var temp_data = [{
            "code": "1",
            "value": "hello"
        }, {
            "code": "2",
            "value": "world"
        }];
        $.ajax({
            url: "http://localhost:14884/api/TestWebApi",
            type: "post",
            data: temp_data,
            success: function (data) {
                console.log(data);
            }
        });

JavaScript 调用 WebApi 参数传递场景分析_第2张图片
List Post 参数无法获取

JavaScript 调用 WebApi 参数传递场景分析_第3张图片
Request Headers
经观察发送请求,怀疑请求类型问题,后经查找分析测试,调用示例做如下修改即可

  • 修改后调用示例
        var temp_data = [{
            "code": "1",
            "value": "hello"
        }, {
            "code": "2",
            "value": "world"
        }];
        temp_data = JSON.stringify(temp_data);
        $.ajax({
            url: "http://localhost:14884/api/TestWebApi",
            contentType: 'application/json; charset=utf-8',//将json数据以request payload的形式发起请求
            type: "post",
            data: temp_data,
            success: function (data) {
                console.log(data);
            }
        });
JavaScript 调用 WebApi 参数传递场景分析_第4张图片
Post List参数获取

场景三 部署后 405 异常补充说明

将场景三Web Api代码部署后,发现页面调用会出现 405
异常

JavaScript 调用 WebApi 参数传递场景分析_第5张图片
405 异常

通过检索排除等方式,判断 IIS设置问题,移除使用 Web Api自动生成 Web.confighandlersremove OPTIONSVerbHandler即可

JavaScript 调用 WebApi 参数传递场景分析_第6张图片
处理程序映射
JavaScript 调用 WebApi 参数传递场景分析_第7张图片
Web.config

参考
ASP.NET Web API(一):使用初探,GET和POST数据
WebApi后端的List前端如何发送?
aspnet webapi 跨域请求 405错误

你可能感兴趣的:(JavaScript 调用 WebApi 参数传递场景分析)