ASP.NET Web API 2 - 从 POST 方法解析 JSON 以动态查询数据库

ASP.NET Web API 2 - Parsing JSON from a POST method to query database dynamically

我想公开我的数据库,以便可以对我的控制器进行 POST,然后用于构建查询。我正在使用 entity framework 来构建我的数据上下文。这里的想法是客户端将在 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;
        }



    }

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

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

Supporting OData Query Options in ASP.NET Web API 2