oData-aspnetcore-自定义控制器路由

时间:2020-01-21 00:15:26

标签: entity-framework-core asp-net-core-spa-services

我可以使用此属性来自定义路由aspnetcore api控制器:

[Route("test")]

但是oData无法识别它。

我该如何解决?

这里要求的是所有代码:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers(mvcOptions => mvcOptions.EnableEndpointRouting = false);
        services.AddOData();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseHttpsRedirection();

        app.UseMvc(routeBuilder =>
        {
            routeBuilder.EnableDependencyInjection();
            routeBuilder.Expand().Filter().OrderBy().Select().SkipToken();
            routeBuilder.MapODataServiceRoute("odata", "odata", GetEdmModel());               
        });
    }

    private IEdmModel GetEdmModel()
    {
        var edmBuilder = new ODataConventionModelBuilder();
        edmBuilder.EntitySet<DivUser>("Users");
        edmBuilder.EntitySet<DivClaim>("Claims");
        edmBuilder.EntitySet<DivUserRole>("UserRoles");
        edmBuilder.EntitySet<DivUserType>("UserTypes");
        return edmBuilder.GetEdmModel();
    }
}

[ApiController]
[Route("[controller]")]
public class UsersController : ControllerBase
{

    [HttpGet]
    [EnableQuery]
    public IEnumerable<DivUser> Get()
    {
        IEnumerable<DivUser> users;
        using (var context = new DivDbContext())
        {
            users = context.Users.Include(user => user.UserClaims).ThenInclude(userClaim => userClaim.Claim).ToList();
        }

        return users;
    }

    [HttpGet]
    [EnableQuery]
    [Route("test")]
    public IEnumerable<DivUser> Test()
    {
        IEnumerable<DivUser> users;
        using (var context = new DivDbContext())
        {
            users = context.Users.Include(user => user.UserClaims).ToList();               
        }

        return users;
    }
}

https://localhost:44354/users的工作原理 https://localhost:44354/users/test作品

https://localhost:44354/odata/users的工作原理 https://localhost:44354/odata/users/test

0 个答案:

没有答案