jquery ajax提交json数据asp.net core3无法获得

fsjflsjfl 2020-11-01 07:57:32
Postman提交raw的JSON格式数据到后台方法可以正确读取,但是通过jQuery Ajax提交的json数据就无法正确!
后台方法的参数加了[FromBody]

$.ajax({
accepts: "application/json", //没有也不行
dataType: "json",//没有也不行

//请求地址
url: url1,
//请求方式
type: "POST",
//请求的媒体类型
contentType: "application/json",
//数据,json字符串 使用了JSON. stirngify也是不行
data: {
"Year": "2020",
"Month": "10",
"Dates": [
{
"Date": "2020-10-31T16:00:00.000Z",
"KeyOid": "8bad334e-34f6-4fd6-a2b2-fbda3cb8826a",
"IsHoliday": true
}
]
},
//请求成功
success: function (res) {
dataloading = false;
console.log(res);
},
//请求失败,包含具体的错误信息
error: function (err) {
dataloading = false;
console.log(err);
}
});

求大神指导!
...全文
3834 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
一叶知秋~ 2020-11-09
  • 打赏
  • 举报
回复
???什么意思
fsjflsjfl 2020-11-03
  • 打赏
  • 举报
回复
我是Content-Type设置 了application/json 不起作用,所以后台FromBody读取不到参数的内容。Postman就可以,所以搞的这么难
fsjflsjfl 2020-11-03
  • 打赏
  • 举报
回复
引用 18 楼 泡泡鱼_ 的回复:
如果你是以HttpContext.Current.Request["a"]接收的a,那前端只能以Form Data的方式发送数据主体过来呀。如果是以StreamReader,然后反序列化获取的a。那前端只能是以Request Payload方式发送数据主体过来的呀。

你确定了你接收参数的方式,在开发者工具中再看一下你用ajax发送请求时,参数是哪种呀,与后台不对应就是传参出了错呀

一般post请求的Content-Type为application/x-www-form-urlencoded时。数据主体是以Form Data方式发送的。Content-Type:为application/json这样的是以Request Payload方式发送的

我以上所有说法都是让你多一种排查方式,并不一定是最终解决方案。只是你问题给我的第一反应就可能是这方面的问题而已。这需要你自己去排查


我不知道后台是以什么形式接收的,是asp.net core3的模型绑定器自动接收绑定。你说的开发者工具是指浏览器F12弹出来的那个工具吗?怎么看ajax发送请求时,参数是哪种?
泡泡鱼_ 2020-11-03
  • 打赏
  • 举报
回复
如果你是以HttpContext.Current.Request["a"]接收的a,那前端只能以Form Data的方式发送数据主体过来呀。如果是以StreamReader,然后反序列化获取的a。那前端只能是以Request Payload方式发送数据主体过来的呀。 你确定了你接收参数的方式,在开发者工具中再看一下你用ajax发送请求时,参数是哪种呀,与后台不对应就是传参出了错呀 一般post请求的Content-Type为application/x-www-form-urlencoded时。数据主体是以Form Data方式发送的。Content-Type:为application/json这样的是以Request Payload方式发送的 我以上所有说法都是让你多一种排查方式,并不一定是最终解决方案。只是你问题给我的第一反应就可能是这方面的问题而已。这需要你自己去排查
fsjflsjfl 2020-11-03
  • 打赏
  • 举报
回复


如图
泡泡鱼_ 2020-11-03
  • 打赏
  • 举报
回复
引用 14 楼 fsjflsjfl 的回复:
[quote=引用 11 楼 泡泡鱼_ 的回复:]我看你发送的数据格式,你说Postman可以。怀疑它是使用Request Payload。ajax是Form Data。至于是不是,你两种方式都用一下,开发者工具里看下
在ajax提交如何使用你说的Request Payload传输呢?[/quote] 朋友,不是你这么问问题的。你至少得告诉我,你看过以后,各自是哪种方式吧?
引用 15 楼 fsjflsjfl 的回复:
[quote=引用 12 楼 泡泡鱼_ 的回复:]你说Postman是正常,那你看一下你自己后台接收数据方式 如果: Request[key] => 接收的是以Form Data的方式发送数据 StreamReader,然后反序列化 =>接收的是以Request Payload方式发送的数据
不会看,我监视HttpContext.Request,body中报异常[/quote] 这怎么能不会看?你说你Postman是可以正常处理,那说明你后台接收参数是正常的呀,你就看一下你怎么接收参数的不就知道了。 比如:前端发一个请求,参数:a=3。你后台怎么取到a的值“3”?这个怎么还能不会看呢……
fsjflsjfl 2020-11-03
  • 打赏
  • 举报
回复
引用 12 楼 泡泡鱼_ 的回复:
你说Postman是正常,那你看一下你自己后台接收数据方式

如果:
Request[key] => 接收的是以Form Data的方式发送数据

StreamReader,然后反序列化 =>接收的是以Request Payload方式发送的数据


不会看,我监视HttpContext.Request,body中报异常
fsjflsjfl 2020-11-03
  • 打赏
  • 举报
回复
引用 11 楼 泡泡鱼_ 的回复:
我看你发送的数据格式,你说Postman可以。怀疑它是使用Request Payload。ajax是Form Data。至于是不是,你两种方式都用一下,开发者工具里看下


在ajax提交如何使用你说的Request Payload传输呢?
fsjflsjfl 2020-11-03
  • 打赏
  • 举报
回复
引用 9 楼 weixin_42037497 的回复:
加上 traditional:true 试一下

type: "POST",
//请求的媒体类型
contentType: "application/json",
//数据,json字符串 使用了JSON. stirngify也是不行

traditional:true,

data: {
"Year": "2020",
"Month": "10",
"Dates": [
{
"Date": "2020-10-31T16:00:00.000Z",
"KeyOid": "8bad334e-34f6-4fd6-a2b2-fbda3cb8826a",
"IsHoliday": true
}
]
},


还是不行,好像ajax只能加工成form data的格式传输。然后还要配合使用list类型,不能使用list 和数据以外的类型,例如队列类型。我改成list就识别出来了。但是Postman的raw格式传输可以使用队列类型。
正怒月神 版主 2020-11-03
  • 打赏
  • 举报
回复
你先看一下这个:https://blog.csdn.net/hanjun0612/article/details/50893719 你试过formbody去掉吗
fsjflsjfl 2020-11-02
  • 打赏
  • 举报
回复


这是Postman的head,勾了的是和ajax设置一样的,encoding的红框内是一样的。
Postman的body如下:
{
"Year": "2020",
"Month": "10",
"Dates": [
{
"Date": "2020-10-31T16:00:00.000Z",
"KeyOid": "8bad334e-34f6-4fd6-a2b2-fbda3cb8826a",
"IsHoliday": true
}
]
}

正怒月神 版主 2020-11-02
  • 打赏
  • 举报
回复
postman中的head和body是什么样子
泡泡鱼_ 2020-11-02
  • 打赏
  • 举报
回复
你说Postman是正常,那你看一下你自己后台接收数据方式 如果: Request[key] => 接收的是以Form Data的方式发送数据 StreamReader,然后反序列化 =>接收的是以Request Payload方式发送的数据
泡泡鱼_ 2020-11-02
  • 打赏
  • 举报
回复
我看你发送的数据格式,你说Postman可以。怀疑它是使用Request Payload。ajax是Form Data。至于是不是,你两种方式都用一下,开发者工具里看下
泡泡鱼_ 2020-11-02
  • 打赏
  • 举报
回复
你打开开发者工具,看一下你用ajax发送的数据主体模式是:Form Data 还是Request Payload
weixin_42037497 2020-11-02
  • 打赏
  • 举报
回复
加上 traditional:true 试一下 type: "POST", //请求的媒体类型 contentType: "application/json", //数据,json字符串 使用了JSON. stirngify也是不行 traditional:true, data: { "Year": "2020", "Month": "10", "Dates": [ { "Date": "2020-10-31T16:00:00.000Z", "KeyOid": "8bad334e-34f6-4fd6-a2b2-fbda3cb8826a", "IsHoliday": true } ] },
fsjflsjfl 2020-11-02
  • 打赏
  • 举报
回复
我大概猜测到问题在哪里,Postman是程序请求可以使raw类型,然后ajax提交数据只能转换成字符串,是经过了加工(不经过加工的raw是模型绑定器可以正常绑定到接口参数中的类实例),导致asp.net core3中的模型绑定器读取错误。但是复制的多层Json数据怎么办?
fsjflsjfl 2020-11-02
  • 打赏
  • 举报
回复
我发帖的时候说明了,提交同样的json数据,Postman提交的正确绑定了参数模型。但是通过ajax提交的却绑定失败,我怀疑是不是Postman上有一个选项是raw而ajax没地方设置这个的问题!?
正怒月神 版主 2020-11-02
  • 打赏
  • 举报
回复
引用 5 楼 fsjflsjfl 的回复:
[quote=引用 4 楼 正怒月神 的回复:][quote=引用 3 楼 fsjflsjfl 的回复:][quote=引用 1 楼 正怒月神 的回复:]postman中的head和body是什么样子
如上[/quote] 无法访问的具体错误是什么? 是404的未找到,还是505服务器的内部错误? 这两个, 404的话,说明接口和ajax访问不匹配。 505,可能是程序问题。[/quote] 不是无法访问,而是提交的数据后台断点查看的时候,是null ,模型绑定失败了。[/quote] ajax调用时,把[FromBody] 去掉看看。
fsjflsjfl 2020-11-02
  • 打赏
  • 举报
回复
引用 4 楼 正怒月神 的回复:
[quote=引用 3 楼 fsjflsjfl 的回复:][quote=引用 1 楼 正怒月神 的回复:]postman中的head和body是什么样子

如上[/quote]
无法访问的具体错误是什么?
是404的未找到,还是505服务器的内部错误?
这两个,
404的话,说明接口和ajax访问不匹配。
505,可能是程序问题。[/quote]
不是无法访问,而是提交的数据后台断点查看的时候,是null ,模型绑定失败了。
加载更多回复(2)

62,047

社区成员

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

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

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

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