如果我理解你的問題,你試圖在服務器上模擬GET /$metadata
,所以你可以將結果存儲在一個文件中。在ASP.NET OData中,$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);
}
}