【问题标题】:Push dynamic Json into Api controller action将动态 Json 推送到 Api 控制器操作中
【发布时间】:2017-07-25 15:43:34
【问题描述】:

我正在使用 documentdb 进行持久化,并且我有一个用于前端的 asp.net 核心应用程序。

我希望能够编写一个接受 Person 作为帖子正文的 api 操作。但是,Person 代表用户可以发布的最少数据。 Person 将仅包含名字和姓氏的属性。用户将能够根据他们的决定推送其他属性(年龄、中间名......,无论他们决定什么),因为他们的帖子只是 json。

有没有办法用 .net 核心实现这一点? DocumentDb 显然支持少模式持久性,所以显然不是问题。但我不知道有什么方法可以让这里的 api 变得灵活。

【问题讨论】:

    标签: asp.net-core azure-cosmosdb


    【解决方案1】:

    你还没有提供你的代码,所以我将假设一些事情,你必须适应它们。

    由于 DocumentDb 支持强类型对象以及无模式(动态)对象,我们可以做的最明智的事情是使用 dynamic 类型:

    using (client = new DocumentClient(new Uri("endpoint://to/your/db"), authKey))
    {
        //jsonObj is the object passed into your controller of type string
        //collection is your DocumentDb collection
        dynamic somePerson =  JsonConvert.DeserializeObject(jsonObj);
        await client.CreateDocumentAsync(collection.SelfLink, somePerson);
    }
    

    在此处阅读有关dynamic 的更多信息:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/using-type-dynamic

    【讨论】:

    • 这看起来很合理。我目前没有处理这方面的代码,它是新的。就将 json 作为字符串传递给控制器​​而言,您的建议似乎很好,但如果我这样做,是否有办法检查 json 字符串是否符合 Person 强类型对象的最小值?即检查 json 包含名字和姓氏属性,然后验证这些值,例如Model.IsValid(转换后的 json ...)。如果我将它作为字符串传递,我将丢失所有使用 DataAnnotations 的内置验证。
    猜你喜欢
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    相关资源
    最近更新 更多