是否可以在 Asp.Net WebApi 项目中公开多个 Odata v4 端点
Is it possible to expose multiple Odata v4 endpoints in Asp.Net WebApi project
标题说明了要求。
是否可以在单个项目中公开多个端点?
类似于:
因为我需要将功能分成多个组件。
谁能帮帮我?
更新
目前我正在使用以下代码来创建和公开 Odata 服务。
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
ConfigureRoute(config);
ConfigureGlobalFilters(config);
HttpServer server = new HttpServer();
ODataBatchHandler batchHandler = new DefaultODataBatchHandler(server);
config.MapODataServiceRoute("Odata", "Odata", GenerateEdmModel(), batchHandler);
...
config.EnsureInitialized();
}
private IEdmModel GenerateEdmModel()
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.Namespace = "ServiceA";
builder.ContainerName = "DefaultContainer";
builder.EntitySet<Permission>("ApplicationPermissions");
return builder.GetEdmModel();
}
我想为每个组件公开单独的服务(在不同的命名空间下?)。
下面一行应该是你关心的:
config.MapODataServiceRoute("Odata", "Odata", GenerateEdmModel(), batchHandler);
第二个字符串参数是 routePrefix
,这意味着您当前可能正在访问 http://yourhost.com/Odata/$metadata. If you simply create another mapping with a different prefix value (e.g. Odata2
) you'd be able to make calls against http://yourhost.com/Odata/$metadata AND http://yourhost.com/Odata2/$ 元数据。您可能还想给它们一个唯一的 routeName(第一个字符串参数),并且您可能还想提供一个不同的模型,因此这两个服务实际上是不同的 :).
标题说明了要求。 是否可以在单个项目中公开多个端点?
类似于:
因为我需要将功能分成多个组件。 谁能帮帮我?
更新
目前我正在使用以下代码来创建和公开 Odata 服务。
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
ConfigureRoute(config);
ConfigureGlobalFilters(config);
HttpServer server = new HttpServer();
ODataBatchHandler batchHandler = new DefaultODataBatchHandler(server);
config.MapODataServiceRoute("Odata", "Odata", GenerateEdmModel(), batchHandler);
...
config.EnsureInitialized();
}
private IEdmModel GenerateEdmModel()
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.Namespace = "ServiceA";
builder.ContainerName = "DefaultContainer";
builder.EntitySet<Permission>("ApplicationPermissions");
return builder.GetEdmModel();
}
我想为每个组件公开单独的服务(在不同的命名空间下?)。
下面一行应该是你关心的:
config.MapODataServiceRoute("Odata", "Odata", GenerateEdmModel(), batchHandler);
第二个字符串参数是 routePrefix
,这意味着您当前可能正在访问 http://yourhost.com/Odata/$metadata. If you simply create another mapping with a different prefix value (e.g. Odata2
) you'd be able to make calls against http://yourhost.com/Odata/$metadata AND http://yourhost.com/Odata2/$ 元数据。您可能还想给它们一个唯一的 routeName(第一个字符串参数),并且您可能还想提供一个不同的模型,因此这两个服务实际上是不同的 :).