加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 如何隐藏web api 2中的元数据,odata

发布时间:2020-12-16 07:25:12 所属栏目:asp.Net 来源:网络整理
导读:我在WebApiConfig中使用MapODataServiceRoute定义了odata路由. config.Routes.MapODataServiceRoute("CompanyoOdata","odata",GetImplicitEdm(config));private static IEdmModel GetImplicitEdm(HttpConfiguration config) { ODataModelBuilder builder = n
我在WebApiConfig中使用MapODataServiceRoute定义了odata路由.

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/ $元数据的访问)

其次,我想忽略序列化的一些属性.我找到了两种方法.

>使用数据协定和使用[DataMember]属性或[IgnoreDataMember]属性标记属性
>在构建模型时在EntitySet上使用Ignore方法

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

我成功使用了第二种方法,但是你不能在ignore方法中传递多个属性.必须对我需要忽略的个人财产这样做,这有点单调乏味.还有另一种方法吗?

任何帮助真的很感激.

解决方法

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

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

如果每种类型只暴露一些属性,可以使用ODataModelBuilder而不是ODataConventionModelBuilder.例如,某些example:

ODataModelBuilder builder = new ODataModelBuilder();
EntityTypeConfiguration<Customer> customer = builder.EntitySet<Customer>("Customers").EntityType;
customer.HasKey(c => c.Id);
customer.Property(c => c.Name);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读