如何在 Web api 2、odata 中隐藏元数据

2024-05-02

我已经使用定义了 odata 路由MapODataServiceRoute in my WebApiConfig.

config.Routes.MapODataServiceRoute("CompanyoOdata", "odata", GetImplicitEdm(config));

private static IEdmModel GetImplicitEdm(HttpConfiguration config)
    {
        ODataModelBuilder builder = new ODataConventionModelBuilder(config, true);
        builder.EntitySet<Company>("Company");
        builder.EntitySet<Photo>("Photos");
        builder.EntitySet<Country>("Country");
        return builder.GetEdmModel();
    }

数据服务运行得很好。但我想要实现一些目标。

我不想公开我的元数据或关联,因为我在内部使用它并且不需要元数据。我如何限制对这些信息的访问(即限制对http://www.sample.com/odata/#metadata http://www.sample.com/odata/#metadata or http://www.sample.com/odata/ http://www.sample.com/odata/$元数据)

其次,我想忽略一些被序列化的属性。我找到了两种方法来做到这一点。

  1. 使用数据契约和标记属性[DataMember]属性或[IgnoreDataMember]属性
  2. Using Ignore方法上EntitySet建立模型时

我无法使用第一种方法,因为我正在使用实体框架的数据库优先方法,因此无法用属性装饰实体。我想我可以通过使用来实现这一点MetaDataType,但似乎只适用于DataAnnotations.

我成功地使用了第二种方法,但是您不能在忽略方法中传递多个属性。必须对我需要忽略的个人财产执行此操作,这有点乏味。还有其他方法可以做到这一点吗?

任何帮助真的很感激。


如果想隐藏元数据(/$metadata)或服务文档(/),可以从现有的路由约定中删除MetadataRoutingConvention,例如:

var defaultConventions = ODataRoutingConventions.CreateDefault();
var conventions = defaultConventions.Except(
    defaultConventions.OfType<MetadataRoutingConvention>());
var route = config.MapODataServiceRoute(
    "odata",
    "odata",
    model,
    pathHandler: new DefaultODataPathHandler(),
    routingConventions: conventions);

如果每种类型只公开一些属性,可以使用O数据模型构建器 http://blogs.msdn.com/b/alexj/archive/2012/08/15/odata-support-in-asp-net-web-api.aspx而不是 ODataConventionModelBuilder。例如,一些example https://aspnetwebstack.codeplex.com/SourceControl/latest#OData/test/System.Web.OData.Test/OData/Builder/ODataModelBuilderTest.cs:

ODataModelBuilder builder = new ODataModelBuilder();
EntityTypeConfiguration<Customer> customer = builder.EntitySet<Customer>("Customers").EntityType;
customer.HasKey(c => c.Id);
customer.Property(c => c.Name);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Web api 2、odata 中隐藏元数据 的相关文章

随机推荐