【问题标题】:ASP.NET Web API 2 - Parsing JSON from a POST method to query database dynamicallyASP.NET Web API 2 - 从 POST 方法解析 JSON 以动态查询数据库
【发布时间】:2018-01-25 20:13:53
【问题描述】:

我想公开我的数据库,以便可以对我的控制器进行 POST,然后将其用于构建查询。我正在使用实体框架来构建我的数据上下文。这里的想法是客户端将在 POST 正文中传递 JSON。从那里将使用 JSON 中指定的属性和值构建查询。这里的关键是我不想硬编码值。我希望它以动态方式构建查询,以便对数据上下文所做的任何更改都将直接反映在代码中。

例如我想:

[
    {
        "NAME":"Random Name"
    },
    {
        "NAME":"Random Name 2",
        "STATUS":"ACTIVE"
    }
]

翻译成这样的:

var query = FROM d in DataContext 
WHERE (x.NAME == "Random NAME 1") 
OR (X.NAME == "Random Name 2" AND X.STATUS == "ACTIVE")

请记住,有超过 60 种可能的属性可供选择,并且数据模型可能会发生变化。

我的想法是将JSON解析成一个对象数组,循环遍历每个对象,然后循环遍历该对象的非空属性以动态构建查询。

这是我的带有实际变量的代码。

控制器

    public class AgreementsController : ApiController
    {

        private AgreementRepository agreementRepository;

        public AgreementsController()
        {
            this.agreementRepository = new AgreementRepository();
        }

        public AGREEMENT[] Post([FromBody]AGREEMENT[] Agreements)
        {

            return agreementRepository.PostAgreements(Agreements);
        }
    }

服务

public class AgreementRepository
    {
        private DataBaseEntities db = new DataBaseEntities();

        public AGREEMENT[] PostAgreements(AGREEMENT[] Agreements)
        {
            List<AGREEMENT> a = new List<AGREEMENT>();

            foreach (AGREEMENT agreement in Agreements)
            {
                /////Loop Through Possible Attributes and then 
                /////Build queries based off of non null values.
                ////Append to List and return Agreement[] to controller

            }

            var agmts = a.ToArray<AGREEMENT>();

            return agmts;
        }



    }

【问题讨论】:

    标签: c# json http-post asp.net-web-api2


    【解决方案1】:

    这可能是您想要使用 OData 的类型。看来您正在使用 EF,我相信它支持 OData。

    它不是 JSON,但我认为这只是达到目的的一种手段,而不是严格的要求。它支持$filter 选项,我认为这正是您想要的。

    Supporting OData Query Options in ASP.NET Web API 2

    【讨论】:

    • 你是对的,因为 JSON 只是达到目的的一种手段,而我正在使用 EF。我会研究OData,我不熟悉它。
    • 这太棒了!
    猜你喜欢
    • 2017-09-17
    • 2022-01-08
    • 2015-01-08
    • 2015-11-02
    • 1970-01-01
    • 2018-02-25
    • 2019-12-07
    • 1970-01-01
    • 2019-12-02
    相关资源
    最近更新 更多