我有一个奇怪的问题。我们使用 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 的开头看起来完全一样,并且不会发生错误。我很困惑这怎么可能。
在其中一个代码文件中有以下文本:
// 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”,以便通过表单的第一个或默认键传递数据。
将Request.Form更改为Request.Query
public async Task<JsonResult> RegisterUser(RestApi_UserModel user_short)
{
var param = HttpContext.Request.Query.Keys.FirstOrDefault();
}```
我发现当请求中的
ContentLength
属性为 null 时出现异常。看来您需要一些实际的表单数据才能访问 Form 属性。