我正在为 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
and /odata/Profile('someid')
两者都有效,但是当我尝试访问 $metadata 端点时(/odata/$metadata#Profile
),我收到以下错误:
{"Message":"未找到与请求 URI 'http://' 匹配的 HTTP 资源****/odata/$metadata'.","MessageDetail":"未找到与名为“Metadata”的控制器匹配的类型。"}
我需要创建一个控制器/动作用于提供元数据?如果是,该行动是如何实施的?
原来这与我更换了IAssembliesResolver
.
我已经实现了一个自定义版本,仅提供成分我在其中实现了控制器的程序集。但是,正如错误所述,它找不到名为的控制器MetadataController
。事实证明,OData 实现了一个:System.Web.OData.MetadataController
,其中规定了$metadata
关键词。
由于我已经实现了自己的IAssembliesResolver
, the System.Web.OData
不包括程序集,并且$metadata
失败的。一旦我发现了这一点,并更新了我的程序集解析器以显式包含 OData 程序集,它现在就可以正常工作了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)