ASP.NET Odata多个子路由

我正在尝试通过Odata Web API公开多个数据库。 现在,我想将每个数据库划分为单独的子URL。 我已经定义了必要的IEdm模型和控制器。 当我仅使用一个Odata Url时,API可以按预期工作。

我使用多个子网址的方法是:

    app.UseMvc(c =>
        {
            c.EnableDependencyInjection();
            c.Expand().Select().OrderBy().Filter().Count().MaxTop(null).SetTimeZoneInfo(timeZone);
            c.MapodataServiceRoute("Database1","api/v1/Database1",Database1.GetModel());
            c.MapodataServiceRoute("Database2","api/v1/Database2",Database2.GetModel());
        });

但是当我尝试访问数据库2的元数据时,我会得到InvalidOperationException,因为某些模板仅在数据库1的控制器中定义,而不在数据库2的控制器中定义。

我的数据库1控制器如下所示:

    public class Database1Controller : ODataController
    {
        private Database1Context Context = new Database1Context();

        [EnableQuery]
        [ODataRoute(DB1Entity1.ApiSubUrl)]
        public IQueryable<DB1Entity1> GetEntity1()
        {
            return Context.Entity1.AsQueryable();
        }

        [EnableQuery]
        [ODataRoute(DB1Entity2.ApiSubUrl)]
        public IQueryable<DB1Entity2> GetEntity2()
        {
            return Context.Entity2.AsQueryable();
        }
    } 

我的数据库2控制器如下所示:

    public class Database2Controller : ODataController
    {
        private Database2Context Context = new Database2Context();

        [EnableQuery]
        [ODataRoute(DB2Entity1.ApiSubUrl)]
        public IQueryable<DB2Entity1> GetEntity1()
        {
            return Context.Entity1.AsQueryable();
        }
    }

我可以访问api/v1/Database1 URL的元数据和所有控制器功能,但是不能访问api/v1/Database2 URL的元数据或控制器功能。

bestd 回答:ASP.NET Odata多个子路由

针对多个子网址的解决方案是将控制器方法的odata路由验证限制为特定路由。

所以控制器1看起来像这样:

memcpy()
本文链接:https://www.f2er.com/3167295.html

大家都在问