Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么jQuery AJAX Post Content Type=application/json到MVC控制器操作方法会导致空参数_Jquery_Json_Ajax_Asp.net Core_Post - Fatal编程技术网

为什么jQuery AJAX Post Content Type=application/json到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

我已经多次看到这个问题被问到和回答过,所以再次重复这个问题,我深表歉意。但是,所有这些问题都是很久以前提出和回答的,所以我不确定这些答案是否与今天更新版本的ASP.NET核心MVC和jQuery相关

我有一个MVC控制器方法,它接受一个类对象参数,比如…
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个其他开发者从我的发现中受益


关于…

你能分享你的
有效载荷吗?因为我可以成功绑定,所以问题可能是由您的类型不匹配引起的。