gpt4 book ai didi

c# - asp.net MVC "Action Method"是否可以在不在参数上声明其特定类型的情况下接收 JSON?如果是这样,如何?

转载 作者:太空狗 更新时间:2023-10-29 17:48:31 28 4
gpt4 key购买 nike

所以,它几乎都在标题中。基本上,我想通过 JQuery 从客户端向 asp.net MVC 发送一个 JSON。我想知道它是否有可能接收(但不一定解析)我想从 JQuery Ajax 调用发送的任何 JSON,无论它是什么类型..没有具体的类型/模型表示它的。 (基本上像动态类型?)

以常规方式执行此操作(我将传递的参数声明为 Object 类型)只会带来空值,这正是我所期望的。

基本上,我想在收到它时做一些“JSON 反射”类型的事情,并能够通过某种 foreach 循环等获取它的属性。

提前致谢。任何帮助都会很棒!

最佳答案

你可以使用 IDictionary<string, object>作为行动论据。只需编写一个自定义模型绑定(bind)器,将 JSON 请求解析到其中:

public class DictionaryModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (!controllerContext.HttpContext.Request.ContentType.StartsWith("application/json", StringComparison.OrdinalIgnoreCase))
{
return null;
}

controllerContext.HttpContext.Request.InputStream.Position = 0;
using (var reader = new StreamReader(controllerContext.HttpContext.Request.InputStream))
{
var json = reader.ReadToEnd();
if (string.IsNullOrEmpty(json))
{
return null;
}
return new JavaScriptSerializer().DeserializeObject(json);
}
}
}

将在 Application_Start 中注册:

ModelBinders.Binders.Add(typeof(IDictionary<string, object>), new DictionaryModelBinder());

然后您可以执行以下 Controller 操作:

[HttpPost]
public ActionResult Foo(IDictionary<string, object> model)
{
return Json(model);
}

你可以向其中扔任何东西:

var model = {
foo: {
bar: [ 1, 2, 3 ],
baz: 'some baz value'
}
};

$.ajax({
url: '@Url.Action("foo")',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(model),
success: function (result) {
// TODO: process the results from the server
}
});

关于c# - asp.net MVC "Action Method"是否可以在不在参数上声明其特定类型的情况下接收 JSON?如果是这样,如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8687110/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com