Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.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
C# 当HttpContext.Request.HasFormContentType=true时,HttpContext.Request.Form.Keys为空_C#_Asp.net Mvc_Asp.net Core - Fatal编程技术网

C# 当HttpContext.Request.HasFormContentType=true时,HttpContext.Request.Form.Keys为空

C# 当HttpContext.Request.HasFormContentType=true时,HttpContext.Request.Form.Keys为空,c#,asp.net-mvc,asp.net-core,C#,Asp.net Mvc,Asp.net Core,这是工作2天前,现在它不是,我不知道为什么。我正在通过ajax提交表单数据: var mData = 'item=' + itemid + '&action=' + action; $.ajax({ url: "/Admin/Home/Ajax", type: 'POST', contentType: 'application/x-www-form-urlencoded', data: mData,

这是工作2天前,现在它不是,我不知道为什么。我正在通过ajax提交表单数据:

    var mData = 'item=' + itemid + '&action=' + action;
    $.ajax({
        url: "/Admin/Home/Ajax",
        type: 'POST',
        contentType: 'application/x-www-form-urlencoded',
        data: mData,
        success: function (data) {
            //Do Something
        }
    });
我有一个处理传入帖子的方法:

            if (HttpContext != null && HttpContext.Request.HasFormContentType)
            {
                foreach (var key in HttpContext.Request.Form.Keys)
                {
                    QueryParams.Add(key, HttpContext.Request.Form[key]);
                }
            }
发布数据时,
HttpContext.Request.HasFormContentType
等于true,但是,
HttpContext.Request.Form.Keys.Count
等于0

我没有发现任何错误。任何关于正在发生的事情的帮助或见解都将不胜感激


这是一个dotnet core 2.2 mvc web应用程序。

您发送的是查询数据,而不是表单数据。尝试以如下形式发送:

{
 item: ...,
 action: ...
}

编辑:实际上,我有点惊讶于它在发送
raw
类型的数据,然后像字符串一样传入查询时起作用。但是,它有效这一微不足道的事实并不意味着它是一种正确的做事方式。例如,如果您试图从Postman发送API请求(我试图重现您的错误),我甚至无法完成这样的操作,因为Postman要求我提供键值对,并将给定的查询解释为一个键。此外,发送js对象比构建字符串更简单。

您发送的是查询数据,而不是表单数据。尝试以如下形式发送:

{
 item: ...,
 action: ...
}

编辑:实际上,我有点惊讶于它在发送
raw
类型的数据,然后像字符串一样传入查询时起作用。但是,它有效这一微不足道的事实并不意味着它是一种正确的做事方式。例如,如果您试图从Postman发送API请求(我试图重现您的错误),我甚至无法完成这样的操作,因为Postman要求我提供键值对,并将给定的查询解释为一个键。此外,发送js对象比构建字符串更简单。

下面是一个工作演示:

1.意见:

<script>
    var mData = 'item=' + 1 + '&action=' + "aaa";
    $.ajax({
        url: "/Home/Ajax",
        type: 'POST',
        contentType: 'application/x-www-form-urlencoded',
        data: mData,
        success: function (data) {
            //Do Something
        }
    });
</script>
3.结果:

以下是一个工作演示:

1.意见:

<script>
    var mData = 'item=' + 1 + '&action=' + "aaa";
    $.ajax({
        url: "/Home/Ajax",
        type: 'POST',
        contentType: 'application/x-www-form-urlencoded',
        data: mData,
        success: function (data) {
            //Do Something
        }
    });
</script>
3.结果:

为什么要使用这样的代码?在动作中,可以将表单参数作为动作参数,甚至是强类型对象。如果你做不到,那并不意味着MVC绑定被破坏了,这意味着有些地方出了问题。在这种情况下,没有表单参数。当前的代码根本无法测试,因为它依赖于HttpContextHi@Onceler,我的答案对您有帮助吗?如果有,您可以接受作为答案吗?请参阅:您为什么使用这样的代码?在动作中,可以将表单参数作为动作参数,甚至是强类型对象。如果你做不到,那并不意味着MVC绑定被破坏了,这意味着有些地方出了问题。在这种情况下,没有表单参数。当前的代码根本无法测试,因为它依赖于HttpContextHi@Onceler,我的答案对你有帮助吗?如果有,你能接受我的答案吗?参考:你是对的,它不是一个真正的表单帖子,但是ajax让它成为一个帖子。多年来,我一直以这种方式使用ajax,没有任何问题。我有其他的dotnet项目仍在使用相同的发布方法。谢谢你是对的,这不是一个真正的表单帖子,但是ajax让它成为一个帖子。多年来,我一直以这种方式使用ajax,没有任何问题。我有其他的dotnet项目仍在使用相同的发布方法。谢谢