前端通过jquery类库post的json类型对象到后台
dataType: "json",
contentType: "application/x-www-form-urlencoded; charset=utf-8"
后台的方法接收的数据
public ApiResult<dynamic> List(string Name, int PageIndex, int PageSize)
其中Name前端发送的是"",我调试用Request.Form["Name"]也能得到""
然后直接调用Name获取到的却是null ?
我在Startup的services.AddMvc()也添加了AddJsonOptions方法并对序列化做了重新配置,可是怎么也解决不了上述的问题.有大神了解的告知一下如何解决啊!!
前端脚本
jQuery.ajax({ type: "POST", global: false, url: "/Api/Department/List", success: function (data) { if (typeof (AjaxCallback) == "function") AjaxCallback(data); }, cache: false, data: {Name:"",PageIndex:1,PageSize:20}, dataType: "json", contentType: "application/x-www-form-urlencoded; charset=utf-8" });
后台代码
[Produces("application/json")] [Route("api/[controller]/[action]")] public class DepartmentController : Controller { // POST api/Department/List public ApiResult<dynamic> List(string Name, int PageIndex, int PageSize) { dynamic data; //这里接收到的Name如果前端有值如"aa"后台可以正常接收到 //但是如果发送的值为"",后台收到的就是null //但是我用Request.Form["Name"]来接收,前端发送的是"",后台收到的也是"" return new ApiResult<dynamic>(data); } }
加上 "[FromBody]" 试试
我是用form提交的,不是用body
@lpyedge: form提交不就是走body吗
你js中传数据的代码怎么写的。
已补充问题,麻烦给看看到底如何解决?
@lpyedge:
var data = {}
data.Name="";
data.PageIndex = 1;
data.PageSize = 20;
jQuery.ajax({
type: "POST",
global: false,
url: "/Api/Department/List",
success: function (data) {
if (typeof (AjaxCallback) == "function")
AjaxCallback(data);
},
cache: false,
data: data,
dataType: "text",
contentType: "application/x-www-form-urlencoded; charset=utf-8"
});
你改成这样试试。
@BUTTERAPPLE: 测试了一下,dataType改成"text"结果照旧
@lpyedge: 我明白你的意思了,就是你想把 ""
传给 controller 但是 controller里面接受到的是 null
@BUTTERAPPLE: yes,就是这个问题,我认为是mvc的json序列化的问题,可是我在startup里面设置
services.AddMvc() //AddJsonOptions mvc json序列化全局设置 .AddJsonOptions(options=> { NewtonsoftDefaultSettings.Default(options.SerializerSettings); });
public static class NewtonsoftDefaultSettings { public static void Default(Newtonsoft.Json.JsonSerializerSettings setting) { setting.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat; setting.DateFormatString = "yyyy-MM-dd HH:mm:ss"; setting.NullValueHandling = Newtonsoft.Json.NullValueHandling.Include; setting.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Include; setting.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver(); setting.ConstructorHandling = Newtonsoft.Json.ConstructorHandling.Default; setting.StringEscapeHandling = Newtonsoft.Json.StringEscapeHandling.Default; setting.FloatParseHandling = Newtonsoft.Json.FloatParseHandling.Double; setting.ObjectCreationHandling = Newtonsoft.Json.ObjectCreationHandling.Replace; setting.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; } }
只解决了属性默认小写的问题,现在是和属性名的大小写一致了,但是无论如何修改NullValueHandling和DefaultValueHandling都无法正常接收到""
@lpyedge: 只能使用楼上所说的[FromBody]来接收,本地测试使用FromBody 可以正常接收
加上 "[FromForm]" 试试 ?
最后怎么处理的?为啥get传参后台取也是Null
最后怎么处理的?为啥get传参后台取也是Null
用[FromForm]string Name就可以了