gpt4 book ai didi

c# - 具有 WebAPI OData 属性路由的 $Metadata 不工作

转载 作者:行者123 更新时间:2023-11-30 14:29:33 27 4
gpt4 key购买 nike

我正在为 OData 端点使用 OData 属性路由。这是我所拥有的示例:

[ODataRoutePrefix("Profile")]
public class ProfileODataController : ODataController
{
[ODataRoute]
[EnableQuery]
public IHttpActionResult Get()
{
var repo = new Repositories.ProfileRepository();

return Ok(repo.GetProfiles());
}

[ODataRoute("({key})")]
[EnableQuery]
public IHttpActionResult Get([FromODataUri] string key)
{
var repo = new Repositories.ProfileRepository();

var result = repo.GetProfiles().SingleOrDefault(x => x.Id== key);
if (result == null) return NotFound();

return Ok(result);
}
}

这是我的设置:

config.MapODataServiceRoute("odata", "odata", ModelGenerator.GetEdmModel());

这是我的 EdmModel 生成:

public static IEdmModel GenerateEdmModel()
{
var builder = new ODataConventionModelBuilder();

builder.EntitySet<Profile>("Profile").EntityType.HasKey(x => x.Id);

return builder.GetEdmModel();
}

urls /odata/Profile/odata/Profile('someid') 都有效,但是当我尝试访问 $metadata 端点时(/odata/$metadata#Profile),我收到以下错误:

{"Message":"No HTTP resource was found that matches the request URI 'http://****/odata/$metadata'.","MessageDetail":"No type was found that matches the controller named 'Metadata'."}

我是否需要创建一个 Controller /操作来提供元数据?如果是,该行动是如何实现的?

最佳答案

原来这与我更换 IAssembliesResolver 有关.

我已经实现了一个自定义版本,只提供我在其中实现了 Controller 的组件程序集。但是,正如错误所说,它找不到名为 MetadataController 的 Controller 。 .事实证明,OData 实现了一个:System.Web.OData.MetadataController , 它提供了 $metadata关键词。

自从我实现了自己的 IAssembliesResolver , System.Web.OData未包含程序集,并且 $metadata失败的。在我发现这一点并更新我的程序集解析器以明确包含 OData 程序集后,它现在可以正常工作了。

关于c# - 具有 WebAPI OData 属性路由的 $Metadata 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25772485/

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