元数据与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程序集,它现在可以正常工作。