C # ODataController с .NET Core: запрос OData, возвращающий пустой набор результатов - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть метод Get, определенный в моем ODataController следующим образом:

[EnableQuery]
[HttpGet]
public IActionResult Get(ODataQueryOptions<ActiveDirectoryData> queryOptions)
{
    var baseQuery = ADQueries.GetADData().AsQueryable();
    return Ok(queryOptions.ApplyTo(baseQuery));
}

Как и ожидалось, он возвращает полный набор записей, когда я вызываю URL без фильтра OData, следующим образом:

http://localhost:64251/odata/ActiveDirectory

Вот усеченный образец данных, которые я получаю (в основном, массив / IEnumerable объектов):

[{"id":"153d54e3-488f-b5ab-a40c-3c5e9ca0da83","fullyQualifiedName":"CN=DC,CN=Computers,DC=12Sphere,DC=com","dn":["CN=DC,CN=Computers,DC=12Sphere,DC=com"],"objectClass":["computer"],"distinguishedName":["CN=DC,CN=Computers,DC=12Sphere,DC=com"],"whenCreated":["20110418170046.0Z"],"whenChanged":["20180607200521.0Z"],"name":["DC"],"sAMAccountName":["DC$"],"memberOf":[""],"description":[""],"mail":[""],"sn":[""],"givenName":[""],"member":[""],"managedBy":[""]},{"id":"d906e5f4-053c-90b6-bd0f-eacfed15f634","fullyQualifiedName":"CN=EXCH,CN=Computers,DC=12Sphere,DC=com","dn":["CN=EXCH,CN=Computers,DC=12Sphere,DC=com"],"objectClass":["computer"],"distinguishedName":["CN=EXCH,CN=Computers,DC=12Sphere,DC=com"],"whenCreated":["20110418182353.0Z"],"whenChanged":["20180607200521.0Z"],"name":["EXCH"],"sAMAccountName":["EXCH$"],"memberOf":["CN=RAS and IAS Servers,CN=Users,DC=12Sphere,DC=com"],"description":[""],"mail":[""],"sn":[""],"givenName":[""],"member":[""],"managedBy":[""]}

Точно так, как я ожидал.

Однако, когдаЯ добавляю фильтр OData к URL, например:

http://localhost:64251/odata/ActiveDirectory?$filter=contains(fullyQualifiedName,'Computers')

Я ничего не получаю - просто пустая страница.

Вот мой Startup.cs:

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.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        services.AddOData();
        services.Configure<MongoSettings>(Configuration.GetSection("MongoDB"));
    }

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

        app.UseMvc(builder =>
        {
            builder.Select().Expand().Filter().OrderBy().Count().MaxTop(null);
            builder.MapODataServiceRoute("odata", "odata", GetModel());
            builder.EnableDependencyInjection();
        });
    }

    public static IEdmModel GetModel()
    {
        var builder = new ODataConventionModelBuilder();
        builder.EntitySet<ActiveDirectoryData>(nameof(ActiveDirectoryData));
        return builder.GetEdmModel();
    }
}

Что мне не хватает?

Кстати, я уже пытался удалить атрибут [EnableQuery] в моем методе Get.Я также пробовал с [EnableQuery], но без вызова ApplyTo ().Неважно, я не могу заставить его работать

...