.Net Core 1.1をMicrosoft.AspNetCore.ODataライブラリと共に使用すると、私は単純なコントローラでget、$ expandおよびを実行するODataエンドポイントを取得できます。他のクエリ。しかし、返される$メタデータを返すことはできません。この質問($Metadata with WebAPi OData Attribute Routing Not Working)は同じ問題ですが、.Net APIはこれが投稿されて以来変更されています。
有効にするために設定、フラグなどが必要ですか?
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)
マイStartup.csは次のようになります:
これ(http://localhost:52315/odataは)私にエラーを与える
{
"@odata.context":"http://localhost:52315/odata/$metadata","value":[
{
"name":"Users","kind":"EntitySet","url":"Users"
},{
"name":"HelloComplexWorld","kind":"FunctionImport","url":"HelloComplexWorld"
}
]
}
この(http://localhost:52315/odata/ $メタデータ)、メタデータを返すように見えます
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>();
});
}
注:コンバージョンの開始時にこれを追加して回避することができますfigureServices(...)メソッドですが、メタデータのサポートはコアプラットフォームの一部でなければなりません。
app.Use(async (context, next) => {
if (0 == string.Compare(context.Request.Path, @"/odata/$metadata", true)) {
context.Request.Path = "/odata";
}
await next.Invoke();
});