Mit .net Core 1.1, mit den Microsoft.AspNetCore.OData-Bibliotheken, bin ich in der Lage, einen OData-Endpunkt zu bekommen, der mit meinem einfachen Controller funktioniert, um $ expand und andere Abfragen. Ich kann jedoch nicht die zurückgegebenen $ -Metadaten zurückgeben. Diese Frage ($Metadata with WebAPi OData Attribute Routing Not Working) ist für das gleiche Problem, jedoch haben sich die .Net-APIs seit der Veröffentlichung geändert.
Gibt es eine Einstellung, ein Flag oder etwas anderes, das ich aktivieren muss?
Diese (http://localhost:52315/odata) scheint die Meta-Daten zurück,
{
"@odata.context":"http://localhost:52315/odata/$metadata","value":[
{
"name":"Users","kind":"EntitySet","url":"Users"
},{
"name":"HelloComplexWorld","kind":"FunctionImport","url":"HelloComplexWorld"
}
]
}
diese (http://localhost:52315/odata/ $ Metadaten) gibt mir den Fehler:
An unhandled exception occurred while processing the request.
NotSupportedException: No action match template '$metadata'
in 'MetadataController'
Microsoft.AspNetCore.OData.Routing.Conventions.DefaultODataRoutingConvention.SelectAction(RouteContext routeContext)
Meine Startup.cs wie folgt aussieht:
public void Configure(IApplicationBuilder app) {
app.UseDeveloperExceptionPage();
app.UseOData("odata");
app.UseMvcWithDefaultRoute();
}
public void ConfigureServices(IServiceCollection services) {
services.AddMvc().AddWebApiConventions();
services.AddSingleton<ISampleService, ApplicationDbContext>();
services.AddOData<ISampleService>(builder =>
{
builder.Namespace = "Sample";
builder.EntityType<ApplicationUser>();
builder.EntityType<Product>();
builder.Function("HelloComplexWorld").Returns<Permissions>();
});
}
HINWEIS: Ich kann umgehen, indem ich dies zu Beginn meiner Con hinzufügen figureServices (...) Methode, obwohl es falsch scheint $ Metadaten Unterstützung sollte Teil der Kernplattform sein.
app.Use(async (context, next) => {
if (0 == string.Compare(context.Request.Path, @"/odata/$metadata", true)) {
context.Request.Path = "/odata";
}
await next.Invoke();
});