Как добавить HasReadLink к сущности OData? - PullRequest
1 голос
/ 01 октября 2019

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

"odata.mediaReadLink": "Employees (1) / $ value"

"odata.mediaContentType": "image / jpeg",

ref: http://docs.oasis -open.org / odata / odata-json-format / v4.0 / cs01 / odata-json-format-v4.0-cs01.html

Я использую ядро ​​Aspnet и OData, но я не могу найти способ сделать это, по крайней мере не так просто, как я ожидалбыть.

Ниже я покажу, как я создаю построитель моделей, добавляю тип мультимедиа к оценке объекта, а затем пытаюсь указать HasReadLink, но когда я получаю сущность по Id, я не получаю обратноссылка для чтения odata media.

var builder = new ODataConventionModelBuilder(serviceProvider);

//This adds HasStream true in the metadata
var assessmentEntityType = builder.EntityType<Assessment>();
assessmentEntityType.MediaType();

var assessmentEntitySetConfiguration = builder.EntitySet<Assessment>(nameof(Assessment) + "s");

// Does not produce effects getting the entity by id
// UPDATE: this code below does have effect only if i set false in the second
// parameter, but anyway this has nothing to do with the media read link
assessmentEntitySetConfiguration.HasReadLink(c =>
    {
        return new Uri("/not-shown");
    }, true);

// see NavigationSourceLinkBuilderAnnotation
// https://github.com/OData/WebApi/blob/d02bc61ea7b31ada1e54abbeebbecb3c5df0e3ac/src/Microsoft.AspNet.OData.Shared/Builder/NavigationSourceLinkBuilderAnnotation.cs

assessmentEntitySetConfiguration.EntityType
    .Filter(QueryOptionSetting.Allowed, nameof(Assessment.IsDeleted))
    .Filter(QueryOptionSetting.Disabled, nameof(Assessment.Description));

Что мне не хватает? Я не смог найти онлайновый пример, чтобы сделать это в ядре aspnet, я нашел какой-то старый пример, чтобы сделать это в сетевом фреймворке, но он хакерский.

ОБНОВЛЕНИЕ 1: В OData для .net Framework я использовал SetHasDefaultStream для достижения этой цели. пример:

var model = modelBuilder.GetEdmModel();
var answerTypeName = typeof(Answer).FullName;
var answerType = (IEdmEntityType) model.FindDeclaredType(answerTypeName);
model.SetHasDefaultStream(answerType, true);

В новом ядре у меня нет возможности установить поток по умолчанию.

Я спросил то же самое в проекте OData.net Github: https://github.com/OData/odata.net/issues/1555

...