标签:指定 post 处理 strong webapi har control char ati
.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, stringbb)
{//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";
}
.netCore WebApi传输参变化
标签:指定 post 处理 strong webapi har control char ati