在webapi中为Action使用dynamic参数实现Post方式调用

1.在webapi中使用controller/action/id的路径配置,打开文件[App_Start] -[WebApiConfig]

 

  config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

 

2.直接使用[HttpPost]过滤器,为action添加实现方法:

[HttpPost]
// POST api/<controller>
public string AdminLogin(string userName,string passWord)
{
  return "";
}

  产生的问题:前端将“type”改为“Post”方式,无论如何都获取不到该方法。

 

3.解决方案一:

 ①添加中转的对象类,用于存储参数。

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

        public string PassWord { get; set; }
    }

②修改action参数配置。

      [HttpPost]
        // POST api/<controller>
        public string AdminLogin([FromBody]AdminLogin adminLogin)
        {
           return adminLogin.UserName;
        }    

③前端调用方法:

      $.ajax({

            type: "POST", url: AdminApi.AdminLogin,
       data: {UserName:"xxx",PassWord:"XXX"},
       success: function (data) {
           //处理方法

            }
        });

  

  

4.解决方案二:

①修改action参数为dynamic及方法调用:

      [HttpPost]
        // POST api/<controller>
        public string AdminLogin([FromBody]dynamic adminLogin)
        {
            string userName = adminLogin.UserName;
            string passWord = adminLogin.PassWord;
            return  userName;
        }

②修改前端调用方式:

        var obj = { UserName: username, PassWord: password };

        //调用api验证方法
        $.ajax({

            type: "POST", url: AdminApi.AdminLogin,
       data: JSON.stringify(obj), contentType: "application/json", 
       success: function (data) {
             //内部实现方法

            }
        });

  

  

 

 

posted @ 2017-11-01 09:42  心之所向,砥砺前行。  阅读(4318)  评论(0编辑  收藏  举报