gpt4 book ai didi

c# - .Net Core 1.1 上的 OData v4 缺失/$元数据

转载 作者:太空宇宙 更新时间:2023-11-03 12:32:29 25 4
gpt4 key购买 nike

使用 .net Core 1.1 和 Microsoft.AspNetCore.OData 库,我能够获得一个 OData 端点与我的简单 Controller 一起执行 get、$expand 和其他查询。但是,我无法让它返回要返回的 $metadata。这个问题 ( $Metadata with WebAPi OData Attribute Routing Not Working ) 针对的是同一个问题,但是 .Net API 自发布以来已经发生了变化。

是否有设置、标志或其他我需要启用的东西?

这 ( 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/ $metadata) 给我错误:

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 看起来像这样:

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>();
});
}

注意:我可以通过在 ConfigureServices(...) 方法的开头添加它来解决这个问题,尽管这似乎是错误的,因为 $metadata 支持应该是核心平台的一部分。

app.Use(async (context, next) => {
if (0 == string.Compare(context.Request.Path, @"/odata/$metadata", true)) {
context.Request.Path = "/odata";
}
await next.Invoke();
});

最佳答案

我今天重新审视了这个,并使用 Microsoft.AspNetCore.OData.vNext 6.0.2-alpha-rtm 包取得了更大的成功。引用 this例如,元数据和默认 OData 路由按预期工作。我的最低配置是:

    public void ConfigureServices(IServiceCollection services)
{
services.AddOData();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();

if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

var modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<Document>("Documents");

app.UseMvc(builder =>
{
builder.MapODataRoute("odata", modelBuilder.GetEdmModel());
});
}

关于c# - .Net Core 1.1 上的 OData v4 缺失/$元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42193231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com