Если я понимаю ваш вопрос, вы пытаетесь моделировать GET /$metadata
на сервере, чтобы сохранить результаты в файле. В OData ASP.NET $metadata
представлен объектом, который реализует IEdmModel
(например, результат вызова ODataModelBuilder.GetEdmModel
). Затем возникает вопрос о том, как сериализовать эту модель для XML.
Следующий помощник будет записывать метаданные службы в данный поток. Для параметров model
и config
вы должны передать те же объекты, которые использовались для вашей конфигурации сервиса.
public class MetadataHelper
{
public static Task WriteMetadataAsync(Stream stream, IEdmModel model, HttpConfiguration config, string odataRouteName)
{
var request = new HttpRequestMessage(HttpMethod.Get, "/$metadata");
request.ODataProperties().Model = model;
request.ODataProperties().RouteName = odataRouteName;
request.SetConfiguration(config);
var payloadKinds = new List<ODataPayloadKind> { ODataPayloadKind.MetadataDocument };
var xmlMediaType = new MediaTypeHeaderValue("application/xml");
var formatter = new ODataMediaTypeFormatter(payloadKinds).GetPerRequestFormatterInstance(model.GetType(), request, xmlMediaType);
var content = new StringContent(String.Empty);
content.Headers.ContentType = xmlMediaType;
return formatter.WriteToStreamAsync(model.GetType(), model, stream, content, null);
}
}