小编典典

为什么我必须匹配参数名称才能从MVC4 Web应用程序中的Ajax调用获取json数据?

ajax

我只想知道为什么.NET必须将参数名称与JSON对象的键名进行匹配?

快速代码预览在这里…

var json = {
    "service": "COMMON",
    "method": "MENU_SUBLIST",
    "UID": "1000007",
    "ULID": "stackoverflow",
    "UNM": "queston", 
    "SITE": "1",
    "DEPT": "2",
    "LANG": "ko", 
    "MENUID": "0000",
    "STEPMENU": "",
    "ACTIONNAME": "" 
}

好的,让我们通过Ajax在控制器中调用一个动作。

$.ajax({
        type: "POST",
        url: "DATACRUD.json",
        data: JSON.stringify(json),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false, //_async,
        success: function (result) {
        }
});

还有我的C#动作代码。

[HttpPost]
public ActionResult DATACRUD(string jsondata)
{
    return Json(new{ fromMVC = jsondata});
}
// Just example.

jsondata在此处为null, 因为我与键名不匹配。

为了使DATACRUD获取JSON数据,我必须这样做。

{ jsondata : {         
        "service":"COMMON",
        "method":"MENU_SUBLIST",
        "UID":"1000007",
        "ULID":"stackoverflow",
        "UNM":"queston",
        "SITE":"1",
        "DEPT":"2",
        "LANG":"ko",
        "MENUID":"0000",
        "STEPMENU":"",
        "ACTIONNAME":""
        }
    }

在这里,问题1 为何我必须将键名与参数名匹配?

就是吗?一定有原因,我想知道为什么。


我想做的是…

{         
        "service":"COMMON",
        "method":"MENU_SUBLIST",
        "UID":"1000007",
        "ULID":"stackoverflow",
        "UNM":"queston",
        "SITE":"1",
        "DEPT":"2",
        "LANG":"ko",
        "MENUID":"0000",
        "STEPMENU":"",
        "ACTIONNAME":""
}

将此JSON数据传递到操作中,我在上面指定了DATACRUD

我希望DATACRUD操作采取JSON数据并使用它,无论键名是什么。

还有另一个答案。答案是为JSON数据创建一个模型并将其作为模型类型接收,并以字符串形式获取模型。

但是在我的应用程序中无法定义模型。它可能会导致一百个模型的创建。

因此,在制作模型后接收JSON数据是我最后需要做的事情。

在这种情况下,我该怎么办?

不允许键名匹配。

不允许生成模型。

不允许使用第三方框架。

我认为可能的答案缩小到几个。

我该怎么办?


阅读 208

收藏
2020-07-26

共1个答案

小编典典

基于MVC控制器发布:从HTTP正文获取JSON对象? 您的操作应为:

[HttpPost]
public ActionResult DATACRUD()
{
    Stream req = Request.InputStream;
    req.Seek(0, System.IO.SeekOrigin.Begin);
    string json = new StreamReader(req).ReadToEnd();
    return Json(new { fromMVC = json });
}
2020-07-26