元数据与WebAPi OData属性路由不起作用

我正在为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").EntityType.HasKey(x => x.Id); return builder.GetEdmModel(); } 

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

{“消息”:“找不到与请求URI匹配的HTTP资源’http:// **** /odata/$metadata’.”,”MessageDetail”:”找不到与名为’元数据的控制器匹配的类型”。“}

我是否需要创建用于提供元数据的控制器/操作 ? 如果是这样,该行动如何实施?

事实certificate它与我更换IAssembliesResolver

我已经实现了一个自定义版本,只提供我已实现控制器的组件程序集。但是,正如错误所述,它找不到名为MetadataController的控制器。 事实certificate,OData实现了一个: System.Web.OData.MetadataController ,它提供了$metadata关键字。

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