[英]How can I accept a random object as a dynamic parameter to my controller
我不太确定如何问这个问题。 实际上,我以前曾做过这项工作,然后进行了一些看似微不足道的更改并破坏了它,但我不确定如何使它生效。
我想做的是在控制器操作中有一个动态对象参数,以便在向其发布一些序列化表单数据时,动态对象将自动绑定到发送给它的各种属性。
我环顾了很多问题,但大多数问题都已过时,并指出需要自定义模型绑定程序,但我想重申一下,如果没有自定义模型绑定程序,这是可行的。 我只是在发布数据中包含formData,并使用动态formData参数捕获了它。
那么在什么条件下ASP.NET会假定这就是我想要的?
public void Post(JObject dynamicJSON)
{
dynamic myObj = dynamicJSON;
int id = myObj.Id
}
JObject类是Newtonsoft.JSON库的一部分
我有一天在偷看,我看到那个威胁。
控制者
[HttpPost]
public ActionResult DoSomething(string a, string b, dynamic c)
{
return new EmptyResult();
}
然后做动态模型binder接口声明
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;
}
}
你被黑了---快乐的编码
反正我是读这个URL线程--- 看出来
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.