在使用AspNetCore OData时,如果带有参数的函数没有元数据,可以使用以下解决方法:
services.AddOData();
app.UseMvc(routeBuilder =>
{
routeBuilder.Expand().Select().OrderBy().Filter();
routeBuilder.MapODataServiceRoute("odata", "odata", GetEdmModel());
});
private static IEdmModel GetEdmModel()
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
// 添加实体集合和实体类型
builder.EntitySet("Products");
builder.EntityType().HasKey(p => p.Id);
// 添加带有参数的函数和返回类型
var function = builder.Function("GetProductsByCategory");
function.Parameter("categoryId");
function.ReturnsCollectionFromEntitySet("Products");
return builder.GetEdmModel();
}
[HttpGet]
[EnableQuery]
public IActionResult GetProductsByCategory(int categoryId)
{
var products = _context.Products.Where(p => p.CategoryId == categoryId);
return Ok(products);
}
GET /odata/GetProductsByCategory(categoryId=1)
此时您将能够访问带有参数的函数并获得正确的元数据。希望这可以帮助到您!