为什么jQuery AJAX Post Content Type=application/json到MVC控制器操作方法会导致空参数
我已经多次看到这个问题被问到和回答过,所以再次重复这个问题,我深表歉意。但是,所有这些问题都是很久以前提出和回答的,所以我不确定这些答案是否与今天更新版本的ASP.NET核心MVC和jQuery相关 我有一个MVC控制器方法,它接受一个类对象参数,比如…为什么jQuery AJAX Post Content Type=application/json到MVC控制器操作方法会导致空参数,jquery,json,ajax,asp.net-core,post,Jquery,Json,Ajax,Asp.net Core,Post,我已经多次看到这个问题被问到和回答过,所以再次重复这个问题,我深表歉意。但是,所有这些问题都是很久以前提出和回答的,所以我不确定这些答案是否与今天更新版本的ASP.NET核心MVC和jQuery相关 我有一个MVC控制器方法,它接受一个类对象参数,比如… public async Task AffiliatedUsers(UserFacilityAccessDTO userAccessInfo) 为了响应用户操作,我想从JavaScript函数调用此方法 $.ajax({ url
public async Task AffiliatedUsers(UserFacilityAccessDTO userAccessInfo)
为了响应用户操作,我想从JavaScript函数调用此方法$.ajax({
url: location.origin + "/facility/affiliatedusers",
method: "POST",
我要发布的数据是一个格式良好的JSON对象,位于名为payload
的变量中下面是有效和无效的
contentType
和data
值的组合。我希望有人能帮助我理解它不起作用的情况。当未指定
contentType
时,此选项有效$.ajax({
url: location.origin + "/facility/affiliatedusers",
method: "POST",
data: payload
在我的操作方法中,我发现contentType(Request.contentType)设置为application/x-www-form-urlencoded
但是当我传递如下数据时…
contentType: "application/json; charset=utf-8;",
data: JSON.stringify(payload), // MUST stringify to show up as JSON in body
我看到action方法的参数已实例化,但没有传递任何值。i、 e.模型绑定似乎没有发生。我在某处读到ASP.NET Core 3.1要求您在传递JSON负载时用[FromBody]
修饰action方法参数。当我这样做时,即使参数没有实例化,我也会将输入参数设置为NULL。我知道我有一个可行的解决方案,但我真的很好奇,为什么应用程序/json有效负载不起作用,而我迄今为止读到的所有内容似乎都表明这是一个闲逛。我是否错过了一些简单但关键的设置。任何帮助都将不胜感激。提前谢谢你
亲切问候……经过一番研究和测试,我找到了根本原因,并想与大家分享这些信息,特别是帮助像我这样的新人 首先,我的有效载荷有一个枚举字段。因此字符串到枚举值的转换是一个问题。这可以通过添加
.AddJsonOptions(config =>
{
// For jQuery ajax post with string values for enum this helps with conversion.
config.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
});
下一个也是更重要的问题是,由于我的应用程序是一个具有视图的MVC web应用程序,因此我的任何控制器都没有使用[ApiController]
属性进行修饰。在我看来(我没有这个社区中其他许多人那么先进,无法真正研究github上的Asp.Net核心框架代码),没有这种装饰,控制器只能处理application\x-www-form-urlencoded
负载
感谢@Yinqui请求查看有效载荷以帮助我。我希望至少有1个其他开发者从我的发现中受益
关于…你能分享你的
有效载荷吗?因为我可以成功绑定,所以问题可能是由您的类型不匹配引起的。