В 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