asp.net – 如何隐藏web api 2中的元数据,odata
我在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]属性标记属性 我不能使用第一种方法,因为我正在使用数据库第一种方法来实现实体框架,因此无法使用属性来装饰实体.我认为我可以通过使用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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 自动完成后的事件填写Asp.net C#或javascript / html,
- asp.net-mvc-3 – 如何防止ASP.NET MVC应用程序中的DoS攻击
- asp.net-mvc – 通配符在asp.net mvc路由
- iis-7 – 使用asp.net在开发机器上创建无cookie应用程序
- 如何在asp.net MVC 5中注销用户?
- ASP.NET Core 企业级开发架构简介及汇总
- 我可以这样修改ASP.NET会话对象吗?
- asp.net-mvc – 不显眼的验证不适用于Ajax.BeginForm
- asp.net – 我如何使用AJAX来确定用户的会话是否已过期,然后
- asp.net-mvc-3 – 在WebGrid中向Header添加自定义html