c# - 是否可以为 ASPNET.Core OData 声明多个路由
问题描述
我正在使用 Microsoft.AspNetCore.OData 7.0.0 nuget 包。
我已经注册了我的 OData 路由前缀,如下所示。
app.UseMvc(routeBuilder =>
{
var builder = new ModelODataBuilder();
routeBuilder.EnableDependencyInjection();
routeBuilder.MapODataServiceRoute("ODataRoutes", "odata/Route1", builder.GetEdmModel(app.ApplicationServices));
});
每个 OData 控制器都有一个 ODataRoutePrefix,其中前缀对应于在 GetEdmModel 中声明和配置的 EntitySet。例如
[ODataRoutePrefix("Service1")]
但是,我需要一些服务具有“odata/Route1”的路由前缀,而其他服务具有“odata/Route2”。例如
http://odata/Route1/Service1 http://odata/Route2/Service2
我不知道如何配置它。以下代码不起作用
app.UseMvc(routeBuilder =>
{
var builder = new ModelODataBuilder();
routeBuilder.EnableDependencyInjection();
routeBuilder.MapODataServiceRoute("ODataRoute1", "odata/Route1", builder.GetEdmModelForRoute1(app.ApplicationServices));
routeBuilder.MapODataServiceRoute("ODataRoute2", "odata/Route1", builder.GetEdmModelForRoute2(app.ApplicationServices));
});
有谁知道我将如何配置它?
解决方案
我想我找到了办法。
在我的 Startup.cs 中添加了一个额外的 app.UseMvc
app.UseMvc( b =>
{
b.Select( ).Expand( ).Filter( ).OrderBy( ).MaxTop( 100 ).Count( );
b.MapODataServiceRoute( "odata" , "odata" , EdmModelBuilder.GetEdmModel( app.ApplicationServices ) );
} );
app.UseMvc( b =>
{
b.Select( ).Expand( ).Filter( ).OrderBy( ).MaxTop( 100 ).Count( );
b.MapODataServiceRoute( "membership" , "membershipapi" , EdmModelBuilderMembership.GetEdmModel( app.ApplicationServices ) );
} );
到目前为止它一直在工作......
您还必须更改代码,以免在两个映射中使用相同的路径:“odata/Route1”
推荐阅读
- regex - 我可以使用 yum 以外的文件模式吗?
- sql - SQL查询:按降序列出所有出现在40部及以上惊悚片中的演员
- javascript - 没有 jsx 的 .vue 文件
- java - 跨面板的 Wicket AjaxIndicatorAppender
- r - fread 文件具有异常值并且 R 会话中止
- angular - 无法让 Amplify JS 中的 setupTOTP 工作 -'associateSoftwareToken'
- java - 使用 ElasticSearch 索引的多个值初始化 java bean
- sonarqube - 为 sonar.properties 中的某些文件排除一些 SonarQube 规则
- java - Java RestTemplate 挂起 204 状态码响应
- android - 如何使用约束布局在水平中心添加固定宽度的图像视图