ASP .NET - Web Api
假设有个Web Api 的路由设置
config.Routes.MapHttpRoute( name: "Agent4App_Api", routeTemplate: "api/AreaName/{controller}/{action}", defaults: new { namespaceName = new[] { "UJia.Areas.AreaName.Controllers" } } );
则
// 不加 Get 头和 [HttpGet] 声明的 // 默认都使用 Post 传输, Get 无效 // 默认响应 Uri 中参数 public ResponseResult A(string a) { return Success(); }
// Get 获取多个简单参数应该是没问题的 (没测试过)
// Get 方法不能加[FormBody], 否则不能触发, 但取到恒为 null // Get 方法不加 [FormUri] 时, 能获取简单数据, 不能获取复合数据 // Get 方法加 [FormUri] 时, 能获取简单数据和复合数据 // Get 方法 使用 Get 开头命名和 [HttpGet] 效果完全相同 public ResponseResult GetD([FromUri]House s) { return Success(); }
// 不使用特性和动词命名的方法默认以 Post 传输 // 使用了 [FromBody] 则数据必须在 body 传输, 而且只能为一个复合类型参数, 要传输简单类型的看下文 // 使用了 [FromUri] 则数据必须在 Url 里传输, 可为符合类型或者简单类型 // 不使用 [FromBody] 和 [FromUri] 的时候, 可以在 Uri 中传输简单类型, 可以在 Body 中传输复合类型 public ResponseResult PostA(string s) { return Success(s); }
但是有个大坑: 如果使用了 Post 也加了 [FromBody]
又传了1个简单类型的参数, 那很抱歉, 后台获取的值肯定是空
$.ajax({ type: "POST", url: "http://172.28.20.106:8002/api/users/addid", data: {"value":"1"} }).success(function (res) { console.log(res); }).error(function (xhr, status) { console.log(xhr); });
解决办法是
当只有一个参数并且为简单类型的时候,
1. data: {"" : "1" } //忽略参数名
2. data: "=1" //加上=号, 并且去掉花括号
Post 不能传输多个参数, 只能并成一个对象来传输
[HttpGet] 特性 和 Get 命名, [HttpGet] 优先级大