使用Web API方法中的动态参数



我正在从事Web API项目,并使用大规模执行数据库任务。在我的控制器中,我希望发布方法接受动态对象,因此可以直接通过大量Insert方法使用它。

public class LinkController : ApiController
{
    public IHttpActionResult Post(dynamic link)
    {
        dynamic model = new Massive.DynamicModel("main", tableName: "Links", primaryKeyField: "Id");
        return Ok(model.Insert(link));
    }
}

和帖子请求中发送以下JSON:

{
    "Name":"StackOverflow",
    "Url":"http://www.stackoverflow.com",
    "Description":"My most visited web site!",
    "FolderId":2
}

我的问题是JSON.NET的方式。当调用Post方法时,链接参数具有预期的4个属性但是它们是类型newtonsoft.json.linq.jvalue而不是某些原始类型(用于名称的Explample字符串),而大规模不能处理jvalue对象。

我需要强制参数具有其属性的原始类型(通过创建自定义jsonConverter,调整Web API模型绑定,...)。

您能做的最好的就是将DTO划分为ExpandoObject

// config.GetType() == typeof(HttpConfiguration)
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new ExpandoObjectConverter());

当您访问其属性时,它仍然是一个动态对象,因为它们是在常规类中设计的。

相关内容

  • 没有找到相关文章

最新更新