Javascript 如何接受随机对象作为控制器的动态参数

Javascript 如何接受随机对象作为控制器的动态参数,javascript,c#,asp.net,asp.net-mvc,Javascript,C#,Asp.net,Asp.net Mvc,我不太清楚该怎么问这个问题。事实上,我以前就有过这样的工作,然后我做了一些看似微不足道的更改并破坏了它,我不知道如何让它工作 我想做的是在我的控制器操作中有一个动态对象参数,这样当一些序列化的表单数据发布到它时,动态对象将自动绑定到发送给它的各种属性 我看了很多问题,但大多数都是老问题,并指出需要自定义模型绑定器,但我想重申,这在没有自定义模型绑定器的情况下是可行的。我只是在post数据中包含一个formData,并用一个动态formData参数捕捉它 那么ASP.NET在什么条件下假设这就是我

我不太清楚该怎么问这个问题。事实上,我以前就有过这样的工作,然后我做了一些看似微不足道的更改并破坏了它,我不知道如何让它工作

我想做的是在我的控制器操作中有一个动态对象参数,这样当一些序列化的表单数据发布到它时,动态对象将自动绑定到发送给它的各种属性

我看了很多问题,但大多数都是老问题,并指出需要自定义模型绑定器,但我想重申,这在没有自定义模型绑定器的情况下是可行的。我只是在post数据中包含一个formData,并用一个动态formData参数捕捉它

那么ASP.NET在什么条件下假设这就是我想要的

public void Post(JObject dynamicJSON)
{
  dynamic myObj = dynamicJSON;
  int id = myObj.Id
}

JObject类是Newtonsoft.JSON库的一部分

有一天我看到了威胁..它的作用是

控制器

然后进行动态模型绑定器接口声明

这里是实现

你被黑客攻击了——快乐编码


无论如何,我是从这个url读取线程的---

这是不可能的,因为模型绑定(使用
DefaultModelBinder
)的过程首先初始化参数中定义的类(使用
Activator.GetInstance
),然后从表单数据中查找键/值对(以及查询字符串值等中的其他值)并设置模型的相应属性。您一定在做其他事情。我不是要您检查我的代码是否有错误,我是问默认模型绑定器在什么条件下将post数据绑定到动态对象。
[HttpPost]
public ActionResult DoSomething(string a, string b, dynamic c)
{
    return new EmptyResult();
}
public class DynamicJsonAttribute : CustomModelBinderAttribute
{
    public override IModelBinder GetBinder()
    {
        return new DynamicJsonBinder(MatchName);
    }

    public bool MatchName { get; set; }
}
using System;
using System.IO;
using System.Linq;
using System.Collections.Generic;
using System.Web.Helpers;
using System.Web.Mvc;

public class DynamicJsonBinder : IModelBinder
{
    private readonly bool matchName;

    public DynamicJsonBinder(bool matchName)
    {
        this.matchName = matchName;
    }

    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var contentType = controllerContext.HttpContext.Request.ContentType;
        if (!contentType.StartsWith("application/json", StringComparison.OrdinalIgnoreCase))
            return null;

        string bodyText;
        using (var stream = controllerContext.HttpContext.Request.InputStream)
        {
            stream.Seek(0, SeekOrigin.Begin);
            using (var reader = new StreamReader(stream))
                bodyText = reader.ReadToEnd();
        }

        if (string.IsNullOrEmpty(bodyText)) return null;

        var desiralized = Json.Decode(bodyText);

        if (!matchName) return desiralized;

        var members = desiralized.GetDynamicMemberNames() as IEnumerable<string>;
        return members == null
            || members.Contains(bindingContext.ModelName)
            ? desiralized[bindingContext.ModelName] : null;
    }
}