web api post/put空值问题以及和angular的冲突的解决

本文探讨了Angular与WebAPI在进行POST请求时遇到的问题,即Angular会将数据自动序列化为JSON格式,导致WebAPI无法直接接收字符串形式的数据。文章提供了两种解决方案,并通过实例演示了解决方法。

先看web api自己的问题

即便你新建一个项目,也会看到示例的values控制器有两个接受[FromBody]String参数的put和post方法,请求的时候发现不能从request里面得到想要的值,而是一个null。

方法定义如下:

image

请求:

image

响应:

image

在这方面,网上已经有很多讨论了,如这篇是讲解得比较深入的,结论是,你需要传递没有参数名的参数。有两种方法,

一种是硬编码,把参数体由{value:’test’}换成{'=test'},如果test是个变量,还得自己拼接,

另一种是把参数名置空,我用的这种方法测试,成功:

image

image

看截图中的source部分:=test

 

web api部分已经讲完。现在轮到angular了。

我们可以用angular的$http,或它的高级封装$resource,我们分别试一下:

image

结果明显是Null

image

注意Source部分,在jquery的post请求里,它是字符串"=test",在angular的post里,它却成了一个对象,所以angular碰到web api,这是机制问题,无解,angular官方文档说得很明确了:

  • If the data property of the request configuration object contains an object, serialize it into JSON format.
  • 无论如何,它都会被json序列化,那么你就见不到字符串形式了,所以下面这种方式是没问题的,不接受一个单字符串,而是对象:

image

image

其中id=1,status=2,结果正常输出,参数能正确序列化为tt对象

image

转载于:https://www.cnblogs.com/walkerwang/p/3173209.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值