当前位置:首页 > Windows程序 > 正文

Web Api Post注意事项

2021-05-25 Windows程序

这里我使用Jquery 来发起异步请求实现数据调用。

  继续使用上一文章中的示例,添加一个index.html页面,添加对jquery的引用。

技术分享

一、无参数Get请求

  一般的get请求我们可以使用jquery提供的$.get() 或者$.ajax({type:"get"}) 来实现:

技术分享

  请求的后台Action方法仍为上篇文章中的GetUser() :

技术分享

  也可以用$.ajax({type:"get"}) 方式,正确的获得了返回数据:

技术分享

二、传递一个参数的Get请求

  通常我们需要传递参数只需要指定ajax方法的data属性即可: data:{"name":"赵大宝"} 

技术分享

  后台正确的返回数据:

技术分享

三、传递两个或多个参数的Get请求

  按照上面的方法,对于多个参数我们可以很容易就写出来: data:{"name":"赵大宝","age":12}

技术分享

  后台正确的返回数据:

技术分享

四、无参数的Post请求

  我们可以使用$.post() 或$.ajax({type:"post"}) 来发起post请求:

技术分享

  后台正确的返回了数据:

技术分享

五、传递一个参数的Post请求:

  首先这里需要提醒大家一下,,我们在修改完后台代码后,如果没有重新生成项目,那么在请求时就会报错:“未找到与请求***匹配的HTTP资源” :

技术分享

  所以,我们只要我们修改了后台代码,就一定要重新生成一下:

技术分享

  不过,当我们重新生成项目,再次发送请求,看到的仍然是404错误,再次检查一番代码,也没有发现是哪里的问题。

技术分享

  事实上,ASP.NET Web API能够正确的识别我们的UserController控制器处理Post /api/user ,但却不能找到一个可以接受的方法来处理请求。

也就是说,Web API接收到的请求能够找到User控制器,但在该控制器中找不到名称为Def 的这个Action。

那我们要怎么来解决呢?

通过搜索MSDN上Web API官网中的说明,我们可以找到下面的一段介绍:

技术分享

在Action 方法中我们需要使用 [FromBody] 属性标签来标明属性

  修改后,再次发送请求,我们可以看到,Status Code 为200,请求发送成功。

技术分享

  可以看到,在post请求中,方法的参数必须要用 [FromBody] 属性来修饰才可以, [FromBody] 就告诉Web API 要从post请求体重去获取参数的值。

但让我们诧异的却是,后台返回的数据中name的值为空。

技术分享

  通过调试,我们可以看到,后台Action 中接收到的name值为null。

技术分享

  通过上面的测试我就也能够猜测到,Web API 要求请求传递的 [FromBody] 参数,肯定是有一个特定的格式,才能被正确的获取到。而这种特定的格式并不是我们常见的 key=value 的键值对形式。Web API 的模型绑定器希望找到 [FromBody] 里没有键名的值,也就是说, 不是 key=value ,而是 =value 。

现在,咱们把data中的key设置为空,然后再次发送请求:

技术分享

  测试可见,后台正确的接收到了数据:

技术分享

六、传递两个参数的Post请求

  按理说,一个参数的请求实现了,那么传递两个或者多个参数也就很顺利了,对于两个参数的后台接收方法,我们可能会这样来写:

技术分享

但事实证明,这样是错误的。

技术分享

那到底两个或者多个参数我们要怎样来定义呢?

再次查看官网中的介绍,我们了解到:

技术分享

  也就是说,[FromBody] 修饰的参数只能有一个。我们需要对传递的多个参数进行封装才行。

这里,我们可以将 Name和 Age 封装成一个Student 类:

技术分享

  前台页面再次发送请求:

技术分享

  Status Code为200,请求成功,并正确获取到后台返回的数据:

技术分享

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/71148.html