gpt4 book ai didi

c# - 使用没有 key 的实体创建 OData API 端点

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

我有一个支持 OData v4 的 ASP.NET Core API 服务。我正在尝试引入一个基于没有 key 的实体的 Controller 。 OData 需要注册实体的 key ,因此我的问题。您可以将其更多地视为一种行动方法。

这个问题不应该是 ASP.NET Core 特有的,但想知道是否有人曾经使用 OData 成功地完成过这个问题。我已经尝试在 CheckRequest 模型中注册其中一个属性,但它没有说它应该是一个导航属性。我还尝试将其注册为复杂类型,因为它没有 key ,但服务随后会为路由返回 404

有关代码示例和更多详细信息,请参见下文。请注意,我使用的是 Microsoft.AspNetCore.App 2.1.5、Microsoft.AspNetCore.OData 7.0.1 和 Microsoft.AspNetCore.OData.Versioning 3.0.0-beta1。在大多数情况下,我们的应用程序 OData 设置基于此处的在线示例:https://github.com/Microsoft/aspnet-api-versioning/tree/master/samples/aspnetcore/ODataBasicSample

[ApiVersion("1.0")]
[ODataRoutePrefix("checkrequests")]
public class CheckRequestsController : ODataController
{
[HttpPost]
[ODataRoute]
public async Task<IActionResult> CheckAsync([FromBody] CheckRequest request)
{
var success = request.Values.Count == 3 && request.OtherValues.Count == 6;
return this.Ok(await Task.FromResult(new CheckResult { Success = true }));
}
}

public class CheckRequest
{
public List<int> Values { get; set; }
public List<int> OtherValues { get; set; }
}

public class CheckResult
{
public bool Success { get; set; }
}

public class CheckRequestModelConfiguration : IModelConfiguration
{
public void Apply(
ODataModelBuilder builder,
ApiVersion apiVersion)
{
switch (apiVersion.MajorVersion)
{
default:
ConfigureV1(builder);
break;
}
}

private static void ConfigureV1(ODataModelBuilder builder)
{
builder.ComplexType<V1.AccessCheckRequest>();
}
}

public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddApiVersioning();
services.AddOData().EnableApiVersioning();
}

public void Configure(
IApplicationBuilder app,
VersionedODataModelBuilder modelBuilder)
{
app.UseMvc(routes =>
{
routes.MapVersionedODataRoutes("odata-bypath", "v{version:apiVersion}", modelBuilder.GetEdmModels());
});
}
}

最佳答案

所以在深入挖掘之后,我找到了答案。 OData v4 支持未绑定(bind)的函数和未绑定(bind)到它们的操作,本质上是实用程序方法。

可以在此处找到更多文档:https://odata.github.io/WebApi/#02-03-model-builder-nonconvention在未绑定(bind)操作和函数部分。

对上述有效代码示例的更改仅更改以下部分:

public class CheckRequestModelConfiguration : IModelConfiguration
{
public void Apply(
ODataModelBuilder builder,
ApiVersion apiVersion)
{
switch (apiVersion.MajorVersion)
{
default:
ConfigureV1(builder);
break;
}
}

private static void ConfigureV1(ODataModelBuilder builder)
{
builder.AddFunction("checkrequests").Returns<CheckResult>();
}
}

关于c# - 使用没有 key 的实体创建 OData API 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53077366/

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