如何在IEDMMODEL中的ODATA中指定ODATA中的路由前缀?
我正在将ASP.NET应用程序迁移到ASP.NET核心。我很难正确迁移ODATA中的未结合功能。该代码基于
启动
public class Startup
{
public void ConfigureServices( IServiceCollection services )
{
services.AddRazorPages();
services.AddControllers().AddOData( opt => opt.AddRouteComponents( "my_route_prefix", GetEdmModel() ) );
}
public void Configure( IApplicationBuilder app )
{
app.UseDeveloperExceptionPage();
app.UseRouting();
app.UseODataRouteDebug();
app.UseAuthorization();
app.UseEndpoints( endpoints => endpoints.MapControllers() );
}
private static IEdmModel GetEdmModel()
{
var builder = new ODataConventionModelBuilder();
builder.EntitySet<Product>( "Products" );
var unboundFunction = builder.Function( "CalculateSalary" ).Returns<string>();
unboundFunction.Parameter<int>( "minSalary" );
return builder.GetEdmModel();
}
}
控制器
public class ProductsController : ODataController
{
[HttpGet]
[EnableQuery]
public IActionResult Get()
{
return Ok( new List<Product>() { new Product() { Id = 1, Category = "Foo" } } );
}
[HttpGet( "CalculateSalary(minSalary={min})" )]
public string CalculateSalary( int min )
{
return $"Unbound function call on CalculateSalary: min={min}";
}
}
当前未结合函数的路由为〜/calculatesalary(minsalary = {min})
。路由前缀my_route_prefix
被忽略。
我如何在iedmmodel
to 〜/my_route_prefix/carculeateAlateAlary(minSalary = {min})
?我发现的方法是在每个未结合函数的每个httpget
属性中预处理前缀:
[HttpGet( "my_route_prefix/CalculateSalary(minSalary={min})" )]
I'm migrating a ASP.NET application to ASP.NET Core. I'm having trouble to properly migrate unbound functions in OData. This code is based on the ODataRoutingSample.
Startup
public class Startup
{
public void ConfigureServices( IServiceCollection services )
{
services.AddRazorPages();
services.AddControllers().AddOData( opt => opt.AddRouteComponents( "my_route_prefix", GetEdmModel() ) );
}
public void Configure( IApplicationBuilder app )
{
app.UseDeveloperExceptionPage();
app.UseRouting();
app.UseODataRouteDebug();
app.UseAuthorization();
app.UseEndpoints( endpoints => endpoints.MapControllers() );
}
private static IEdmModel GetEdmModel()
{
var builder = new ODataConventionModelBuilder();
builder.EntitySet<Product>( "Products" );
var unboundFunction = builder.Function( "CalculateSalary" ).Returns<string>();
unboundFunction.Parameter<int>( "minSalary" );
return builder.GetEdmModel();
}
}
Controller
public class ProductsController : ODataController
{
[HttpGet]
[EnableQuery]
public IActionResult Get()
{
return Ok( new List<Product>() { new Product() { Id = 1, Category = "Foo" } } );
}
[HttpGet( "CalculateSalary(minSalary={min})" )]
public string CalculateSalary( int min )
{
return quot;Unbound function call on CalculateSalary: min={min}";
}
}
Currently the route for the unbound function is ~/CalculateSalary(minSalary={min})
. The route prefix my_route_prefix
gets ignored.
How can I configure the route for all unbound functions in a IEdmModel
to ~/my_route_prefix/CalculateSalary(minSalary={min})
?
The only way I found is to prepend the prefix in every HttpGet
attribute of every unbound function:
[HttpGet( "my_route_prefix/CalculateSalary(minSalary={min})" )]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论