1.在webapi中使用controller/action/id的路径配置,打开文件[App_Start] -[WebApiConfig]
1 2 3 4 5 | config.Routes.MapHttpRoute( name: "DefaultApi" , routeTemplate: "api/{controller}/{action}/{id}" , defaults: new { id = RouteParameter.Optional } ); |
2.直接使用[HttpPost]过滤器,为action添加实现方法:
1 2 3 4 5 6 | [HttpPost] // POST api/<controller> public string AdminLogin( string userName, string passWord) { return "" ; } |
产生的问题:前端将“type”改为“Post”方式,无论如何都获取不到该方法。
3.解决方案一:
①添加中转的对象类,用于存储参数。
1 2 3 4 5 6 | public class AdminLogin { public string UserName { get ; set ; } public string PassWord { get ; set ; } } |
②修改action参数配置。
1 2 3 4 5 6 | [HttpPost] // POST api/<controller> public string AdminLogin([FromBody]AdminLogin adminLogin) { return adminLogin.UserName; } |
③前端调用方法:
1 2 3 4 5 6 7 8 9 | $.ajax({ type: "POST" , url: AdminApi.AdminLogin, data: {UserName: "xxx" ,PassWord: "XXX" }, success: function (data) { //处理方法 } }); |
4.解决方案二:
①修改action参数为dynamic及方法调用:
1 2 3 4 5 6 7 8 | [HttpPost] // POST api/<controller> public string AdminLogin([FromBody]dynamic adminLogin) { string userName = adminLogin.UserName; string passWord = adminLogin.PassWord; return userName; } |
参数直接从 Request.Content.ReadAsAsync<dynamic>().Result;获取,字符串ReadAsStringAsync().Result
1 2 3 4 5 6 7 8 | [HttpPost] // POST api/<controller> public string AdminLogin() { var adminLogin = Request.Content.ReadAsAsync<dynamic>().Result; string userName = adminLogin.UserName; string passWord = adminLogin.PassWord; return userName; } |
②修改前端调用方式:
1 2 3 4 5 6 7 8 9 10 11 12 | var obj = { UserName: username, PassWord: password }; //调用api验证方法 $.ajax({ type: "POST" , url: AdminApi.AdminLogin, data: JSON.stringify(obj), contentType: "application/json" , success: function (data) { //内部实现方法 } }); |