如果 Asp.Net Core OData 无法识别控制器中的 Get 动作方法,可能是因为缺少必要的路由配置。以下是一个可能的解决方案:
确保已经正确地添加了 Microsoft.AspNetCore.OData NuGet 包。
在 Startup.cs 文件的 ConfigureServices 方法中添加 OData 服务配置:
services.AddControllers(mvcOptions =>
{
mvcOptions.EnableEndpointRouting = false;
})
.AddOData(options =>
{
options.Select().Filter().Expand().OrderBy().Count();
options.RouteComponents.Add(new ODataRouteComponent()
{
RoutePrefix = "odata",
ControllerSuffix = "Controller"
});
});
app.UseMvc(routeBuilder =>
{
routeBuilder.Select().Filter().Expand().OrderBy().Count();
routeBuilder.MapODataServiceRoute("odata", "odata", GetEdmModel());
});
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
private readonly MyDbContext _context;
public ProductsController(MyDbContext context)
{
_context = context;
}
[HttpGet]
[EnableQuery]
public IQueryable Get()
{
return _context.Products;
}
}
请注意,以上代码示例假设存在一个名为 "Products" 的实体,并且已经创建了一个名为 "MyDbContext" 的数据库上下文类。
希望这个解决方案能够帮助到你解决问题。