.netCore WebApi传输参变化

.netCore 的 WebApi,一般以前的mvc5,继承自 ApiController ,则是WebApi,采用独有的管道处理模型,再Core中,一般是 继承自 ControllerBase,控制器类上标注 [ApiController]

1.前端代码

1  //NetCoreWebApi中,传输 application/json; 格式的,后端无需加[FormBody]也能拿到值
2  $.ajax({
3   type: "post",
4     url: "/api/WebApi/ww",
5     data: JSON.stringify( { a: 1, b: 2,c: 4,"yy":99,"bb":"匹配"} ),  //如果没有序列化,后端获取不到,序列化了,WebApi不需要加 FormBody,能拿到值,contentType: "application/json;charset=utf-8"//不加上 默认不是表单的那种也不是json那种
6      contentType: "application/x-www-form-urlencoded",//这个类型无法指定
7      data: { a: 1, b: 2,c: 4,"yy":99,"bb":"匹配"},
8     })

2.后端代码

 [HttpPost]
[Route("ww")]
 public string Po(KJ k, int yy, string bb)
 {
     //k null
     //yy 0
     //b  null
 }
3.结论:
因为前端指定了,传输类型为,"application/x-www-form-urlencoded",就算不写 contentType,它的默认值也是“application/x-www-form-urlencoded”,但是指定失败
最后的请求格式:application /problem+json; charset=utf-8
报错为:415
解决:指定为 json传输,序列化后传输,后端就可以拿到值 (可以不用[FormBody]),核心都在 传输的 contentType
[HttpPost]
[Route("E3")]
public string fdasfs([BindAttribute(include: "a,b")] [FromBody] KJ p, int r = 0)
{
 //******************.Net Core Mvc WebApi的post的使用**************************/
 //1.前端指定的application/json,传输json数据,不管有没有[FromBody]都可以拿到值
   /*2.前端指定的application/x-www-form-urlencoded,传输json数据或者json对象,失败,
     *明明设置了传输类型,但是却成了 application /problem+json; charset=utf-8,导致请求失败
     3.如果传入的除了一个实体,还有其他参数,那就都绑定不上 都没有拿到值 
      前端是这样的:{user: {a: 1, b: 9}, r: 99} 就是不行的,
      {a: 1, b: 9}可行的
       必须整成一个实体
       /* var json = { user: { a: 1, b: 9,  }, r: 99 };
$.ajax({
   url: "/api/mm/E3",
   type: "post",
   //contentType:"application/x-www-form-urlencoded",//写成这种,写了也白写,最终传输类型被覆盖
   contentType:"application/json",
   data:JSON.stringify(json)
}); *//* 4.NetCore的 BindAttribute特性 在  contentType:"application/json 不起作用,不能绑定指定的属性,在
  contentType:"application/x-www-form-urlencoded  表单中完全可以,过滤掉不需要的属性
   FormData    
    a:1
    b:9
    */
   return "OK";
}
 
 

猜你喜欢

转载自www.cnblogs.com/Qintai/p/11829535.html