Ami*_*ila 4 asp.net asp.net-mvc odata asp.net-web-api asp.net-web-api2
我MapODataServiceRoute在我的用途中定义了odata路线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();
}
Run Code Online (Sandbox Code Playgroud)
数据服务工作得很好.但我想做的事情很少.
我不想暴露我的元数据或关联,因为我在内部使用它并且不需要元数据.如何限制对这些信息的访问(即限制访问http://www.sample.com/odata/#metadata或http://www.sample.com/odata/ $ metadata)
其次,我想忽略序列化的一些属性.我找到了两种方法.
[DataMember]属性或[IgnoreDataMember]属性的属性Ignore方法EntitySet我不能使用第一种方法,因为我正在使用数据库第一种方法来实现实体框架,因此无法使用属性来装饰实体.我以为我可以通过使用来实现这一点MetaDataType,但它似乎只适用于DataAnnotations.
我成功使用了第二种方法,但是你不能在ignore方法中传递多个属性.必须对我需要忽略的个人财产这样做,这有点单调乏味.还有另一种方法吗?
任何帮助真的很感激.
小智 10
如果要隐藏元数据(/ $元数据)或服务文档(/),可以从现有路由约定中删除MetadataRoutingConvention,例如:
var defaultConventions = ODataRoutingConventions.CreateDefault();
var conventions = defaultConventions.Except(
defaultConventions.OfType<MetadataRoutingConvention>());
var route = config.MapODataServiceRoute(
"odata",
"odata",
model,
pathHandler: new DefaultODataPathHandler(),
routingConventions: conventions);
Run Code Online (Sandbox Code Playgroud)
如果每种类型只暴露一些属性,可以使用ODataModelBuilder而不是ODataConventionModelBuilder.例如,一些例子:
ODataModelBuilder builder = new ODataModelBuilder();
EntityTypeConfiguration<Customer> customer = builder.EntitySet<Customer>("Customers").EntityType;
customer.HasKey(c => c.Id);
customer.Property(c => c.Name);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3060 次 |
| 最近记录: |