当前位置: 首页 > 面试题库 >

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

海典
2023-03-14
问题内容

我只想知道为什么.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数据创建一个模型并将其作为模型类型接收,并以字符串形式获取模型。

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

因此,在制作模型后接收JSONhtml" target="_blank">数据是我最后需要做的事情。

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

不允许键名匹配。

不允许生成模型。

不允许使用第三方框架。

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

我该怎么办?


问题答案:

基于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 });
}


 类似资料:
  • 我正在使用Reverfit2,我试图从我用Python制作的Web服务中请求一些数据。 实际上,它抛出了一个“java.lang.IllegalStateException”,但是当我调用GET方法时,API返回代码200,而且我还可以看到用于调试响应JSON的打印版本。问题是Call方法,因为它总是在failure时执行。 求求你,救命! 这是我的(简单的)Python Web服务,API-Pr

  • 问题内容: 我正在尝试写入,但是,直到我致电,实际上才发送任何数据。即使我设置为false,也仍然不会发送。有人知道为什么吗?API文档中没有任何内容对此进行描述。 URLConnection上的Java API文档:http : //download.oracle.com/javase/6/docs/api/java/net/URLConnection.html Java的关于读取和写入URLC

  • 我有一些数组,如果它们包含类似的值,我想返回这些数组的名称。 我有我的变量,它有多个数组,名字要么是,要么是,要么是。包含的只是变量中某些数组中相同的值。我需要返回数组中包含、和的数组的名称。因此,对于这个示例,我需要返回:。 通过这个函数抛出它们时,我得到一个错误。如何获取返回的数组?

  • 问题内容: 我在课堂上有这个功能: 我尝试使用此函数来调用该函数: 问题是编译器希望它看起来像这样: 为什么第一个会导致错误? 问题答案: Swift 2.0更新 :现在,默认情况下,函数的功能与方法相同,并且对于两种方法而言: 第一个参数没有外部名称;和 其他参数的外部名称与内部名称相同。 除此之外,下面的规则仍然适用,只是速记语法已消失。 这是一个更一般的答案:函数在类之外定义为真函数时以及在

  • 问题内容: 我有这个数组: 是否可以通过知道名称来获取值或特定元素? 像这样的东西: 要么 问题答案: 通常通过数字索引访问数组,因此在您的示例中。如果您知道每个对象的属性都是唯一的,则可以将它们存储在对象而不是数组中,如下所示: 如果您实际上想要一个像您的帖子中那样的对象数组,则可以遍历该数组并在找到具有对象具有所需属性的元素时返回:

  • 我有以下ajax调用。我想用jason格式发出数据。然而,我在Fiddler中注意到,数据被转换为查询字符串参数。我做错了什么?