【发布时间】:2019-02-19 10:39:35
【问题描述】:
我尝试在 ASP 中使用 OData。咆哮我的代码:
//============== Startup.cs
public void ConfigureServices(IServiceCollection services) {
services.AddDbContext<EntriesContext>(
opt => opt.UseMySql("server=localhost;database=mydb;user=myusr;password=mypass",
mysqlOptions =>{mysqlOptions.ServerVersion(new Version(5..), ServerType.MySql);}));
services.AddOData();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
...
app.UseMvc(b => { b.MapODataServiceRoute("odata", "odata", GetEdmModel()); });
}
private static IEdmModel GetEdmModel() {
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Entry>("Entries");
return builder.GetEdmModel();
}
控制器:
[Route("api/[controller]")]
[ApiController]
[EnableCors("AllowMyOrigin")]
public class EntriesController : ODataController
{
private readonly EntriesContext _context;
public EntriesController(EntriesContext context) {
_context = context;
}
[HttpGet]
[EnableQuery]
public ActionResult<List<Entry>> GetAll() {
return _context.Entries.ToList();
}
以及上下文:
public class EntriesContext : DbContext
{
public EntriesContext(DbContextOptions<EntriesContext> options) : base(options) { }
public DbSet<Entry> Entries { get; set; }
}
但是,我不清楚我应该使用什么路径来获取条目(如果没有 OData,我会使用 localhost:9000/api/entries,但现在我很困惑)。
我尝试做 https://localhost:44384/odata/entries 和 https://localhost:44384/odata/api/entries 但我得到 404
我尝试评论控制器的路由,像这样
//[Route("api/[controller]")]
//[ApiController]
[EnableCors("AllowMyOrigin")]
public class EntriesController : ODataController
还修改了动作
[HttpGet]
[EnableQuery]
public IActionResult Get() {
return Ok(_db.Entries);
}
然后我尝试了https://localhost:44384/odata/Entries 并获得了完整的条目列表...但是,https://localhost:44384/odata/Entries?$take=2 不起作用:400 错误请求:Parameter name: $take' is not supported."
【问题讨论】:
标签: asp.net-web-api asp.net-core odata asp.net-core-webapi asp.net-core-2.1