HttpContext.Request.Form 抛出“System.InvalidOperationException”类型的异常 - 为什么?

问题描述 投票:0回答:3

我有一个奇怪的问题。我们使用 C# 来构建 ASP.NET MVC 应用程序,使用带有 jQuery 和数据表的 JavaScript 作为前端。在前端,部分代码如下所示:

        table: "#restapiusers",
        ajax: {
            create: { url: "/restapiuser/RegisterUser" },
            edit: { url: "/restapiuser/EditUser" }
        },

问题是,尽管 RegisterUser 和 EditUser 两个端点都以相同的方式传递有效负载,但只有 EditUser 有效。

        [HttpPost]
        public async Task<JsonResult> RegisterUser(RestApi_UserModel user_short)
        {
            var param = HttpContext.Request.Form.Keys.FirstOrDefault();

当我在上面的行设置断点并将鼠标光标移到“Form”上时,它说 HttpContext.Request.Form 抛出了“System.InvalidOperationException”类型的异常。

EditUser 的开头看起来完全一样,并且不会发生错误。我很困惑这怎么可能。

javascript c# jquery asp.net-mvc
3个回答
0
投票

在其中一个代码文件中有以下文本:

// Defaults for DT-Editor for all future instances
$.extend(true, $.fn.dataTable.Editor.defaults, {
    ajax: {
        create: {
            type: 'POST',
            //*** contentType: "application/json",
            //*** dataType: 'json',
            data: function (d) {
                d = JSON.stringify(Object.values(d.data))
                console.info("Payload", d);
                return d
            },
        },
        edit: {
            type: 'POST',
            //contentType: "application/json",
            //dataType: 'json',
            data: function (d) {
                d = JSON.stringify(Object.values(d.data))
                console.info("Payload", d);
                return d
            },
        }
    },
    idSrc: 'id',
});

我注释掉了用“***”标记的行,现在它可以工作了。显然,contentType 不能是“application/json”,以便通过表单的第一个或默认键传递数据。


0
投票

将Request.Form更改为Request.Query

public async Task<JsonResult> RegisterUser(RestApi_UserModel user_short)
 {
   var param = HttpContext.Request.Query.Keys.FirstOrDefault();
}```

0
投票

我发现当请求中的

ContentLength
属性为 null 时出现异常。看来您需要一些实际的表单数据才能访问 Form 属性。

© www.soinside.com 2019 - 2024. All rights reserved.