我對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();
}
的URL /odata/Profile
和/odata/Profile('someid')
都工作,但是當我嘗試訪問$元數據端點(/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'."}
是否需要創建一個控制器/操作用於提供元數據?如果是這樣,該行動如何實施?
你可以發表你的'ModelGeneratlr.GetEdmModel()'嗎? – Blaise 2014-09-12 14:32:11
@Blaise發表。 – 2014-09-12 17:23:09
你的代碼沒有什麼特別的。不需要額外的操作來提供元數據。您應該可以使用'.../odata /?$ metadata'和'.../odata/$ metadata'查看元數據。 – Blaise 2014-09-12 19:47:42