【发布时间】:2014-09-10 18:25:28
【问题描述】:
我正在为 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();
}
网址/odata/Profile 和/odata/Profile('someid') 都可以工作,但是当我尝试访问 $metadata 端点 (/odata/$metadata#Profile) 时,出现以下错误:
{"Message":"未找到与请求 URI 'http://****/odata/$metadata' 匹配的 HTTP 资源。","MessageDetail":"No找到与名为“元数据”的控制器匹配的类型。"}
我是否需要创建一个控制器/操作来提供元数据?如果是这样,该操作是如何实施的?
【问题讨论】:
-
你能发一下你的
ModelGeneratlr.GetEdmModel()吗? -
在您的代码中没有发现什么特别之处。无需额外操作即可提供元数据。您应该能够使用
.../odata/?$metadata和.../odata/$metadata查看元数据。 -
@Blaise 正如我所料,但事实并非如此。我使用任何一个 url 都会遇到同样的错误。
标签: c# asp.net-web-api odata asp.net-web-api-routing