oData - aspnetcore - пользовательские маршруты контроллера - PullRequest
0 голосов
/ 21 января 2020

Я могу использовать этот атрибут для настраиваемого маршрута 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 / пользователи РАБОТАЕТ https://localhost: 44354 / пользователи / тест РАБОТАЕТ

https://localhost: 44354 / odata / users WORKS https://localhost: 44354 / odata / users / test НЕ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...