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

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 { getset; }

 

    public string PassWord { getset; }

}

②修改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) {

      //内部实现方法

 

     }

 });

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值