Как отключить получение только метаданных в маршрут OData - PullRequest
1 голос
/ 29 апреля 2020

Я добавил два маршрута. Один из них содержит префикс динамического c:

ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
        builder.EntityType<UOM>();
        var entityType = builder.EntityType<Product>();
        builder.EntitySet<Product>("Products");
        builder.EntitySet<UOM>("UOMs");

        var model = builder.GetEdmModel();
        config.MapODataServiceRoute(
        routeName: "ODataRoute",
        routePrefix: null,
        model: model);

        config.MapODataServiceRoute(
        routeName: "ODataRouteWithContext",
        routePrefix: "{context}/",
        model: model);

Теперь, когда я отправлю https://localhost: 44326 / , я получу метаданные:

result

Но когда я пытаюсь что-то наподобие https://localhost: 44326 / xyz , он также возвращает метаданные.

Цель второго маршрута - получить объекты из указанного c контекста. Например, https://localhost: 44326 / ac2db7f3-7581-4e6a-afa0-c4548d6ae89a / Products Таким образом, префикс контекста должен иметь только тип Guid. Но я не хочу показывать метаданные для https://localhost: 44326 / xyz запросов. Так как я могу решить эту проблему?

1 Ответ

1 голос
/ 30 апреля 2020

Я добавил пользовательское соглашение в маршрут и проигнорировал показ метаданных, таких как:

conventionsWithContextTokenPrefix.Except(conventionsWithContextTokenPrefix.OfType<MetadataRoutingConvention>())
...