fetch如何以application/x-www-form-urlencoded与webapi交互?

lovebaby 2020-04-01 09:47:56
fetch("http://localhost:58513/api/decheng/", {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: { "LogId": 3, "UserName": "test" },
})


fetch通过如上代码,在webapi是无法获取到值的,不知道正确的方法应该是什么?

采用'Content-Type': 'application/json',传递json字符串是可以的,我只是想知道当'Content-Type': 'application/x-www-form-urlencoded'时如何向webapi传递参数及获取值
...全文
1230 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Li59297 2021-02-24
  • 打赏
  • 举报
回复 1
body: 'LogId=3&UserName=test'
big_cheng 2020-07-30
  • 打赏
  • 举报
回复
fetch 'application/x-www-form-urlencoded' 用URLSearchParams fetch 'multipart/form-data' 用FormData fetch 'application/json' 用JSON.stringify({}) 如果未指定'Content-Type', Chrome 会根据body 猜测.
ying1234 2020-07-30
  • 打赏
  • 举报
回复
引用 7 楼 by_封爱 的回复:
其实 我最初做这种的想法是这样的.. 因为调用者 一般都不清楚 从哪里copy过来的webclient. 然后就请求. 一般有2种type 一种是formdata一种是json 我想作为服务端 能解析2种不同的方式.而不用强制客户端. 微信公众号的接口 就是能兼容2种模式.. 后来想了下 实现起来比较麻烦.. 我就懒得弄了. .
也不麻烦,做一个公用的接收参数类,就是翻译类,把所有类型的参数转换成 字典类型的。默认用form接收,form里没数据就用json接收,简单,一般就这两种就行了,或者用Content-Type判断也可以,
by_封爱 2020-04-01
  • 打赏
  • 举报
回复
这个问题我之前研究过.你可以看下我之前写的帖子. https://bbs.csdn.net/topics/392146314 这个你只能约束一下前台客户端了. 如果客户端采用formdata方式 你api中的方法 如果使用frombody 这种特性的对象 是无法收到值的. 你只能

HttpContextBase context = (HttpContextBase)Request.Properties["MS_HttpContext"];
HttpRequestBase request = context.Request;
var id= request.Form["id"];
这种形式.. 虽然你可以获取所有的form . 自己进行转换.. 但是还是 比较麻烦的. 而且这种形式 key还不能重复.. 所以你就约束前台调用 只能postjson这种方式就行了.. 目前我还没有太好的解决方案.. 因为是自己不想写太多的代码..
lovebaby 2020-04-01
  • 打赏
  • 举报
回复
默认应该是text/plain吧,我如果去掉Content-Type,会显示 这一点应该是和ajax不同的。 传递json字符串的话,是可以正常解析的。只是我想知道如何传递formdata,在WEBAPI端又如何获取到传递的formdata?
mirrorspace 2020-04-01
  • 打赏
  • 举报
回复
默认就是以表单参数传递的. webapi要从formdata中取参数 如果是json传递,要从inputstream中取 url参数,querystring取. 前后对应好了就没有问题
by_封爱 2020-04-01
  • 打赏
  • 举报
回复
其实 我最初做这种的想法是这样的.. 因为调用者 一般都不清楚 从哪里copy过来的webclient. 然后就请求. 一般有2种type 一种是formdata一种是json 我想作为服务端 能解析2种不同的方式.而不用强制客户端. 微信公众号的接口 就是能兼容2种模式.. 后来想了下 实现起来比较麻烦.. 我就懒得弄了. .
楠小南 2020-04-01
  • 打赏
  • 举报
回复
后端重载看行不行,只能这样
lovebaby 2020-04-01
  • 打赏
  • 举报
回复
感谢!如果没有更好的办法,那就只能限制客户端传值方式了
lovebaby 2020-04-01
  • 打赏
  • 举报
回复
引用 3 楼 by_封爱 的回复:
这个问题我之前研究过.你可以看下我之前写的帖子. https://bbs.csdn.net/topics/392146314 这个你只能约束一下前台客户端了. 如果客户端采用formdata方式 你api中的方法 如果使用frombody 这种特性的对象 是无法收到值的. 你只能

HttpContextBase context = (HttpContextBase)Request.Properties["MS_HttpContext"];
HttpRequestBase request = context.Request;
var id= request.Form["id"];
这种形式.. 虽然你可以获取所有的form . 自己进行转换.. 但是还是 比较麻烦的. 而且这种形式 key还不能重复.. 所以你就约束前台调用 只能postjson这种方式就行了.. 目前我还没有太好的解决方案.. 因为是自己不想写太多的代码..
是的,我也是和你一样,想知道有没有办法在使用frombody的情况下,获取formdata的值。

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧