如何将ObjectId传递给ODataController GET方法?
由于ObjectId是文档的唯一标识符,我首先想到的是做这样的事情,其中' 542978c4e4b0e67da1edc7f3'是ObjectId:
odata/Teams(542978c4e4b0e67da1edc7f3)
但是当我这样做时,我的GET方法不会选择它,ObjectId为空{000000000000000000000000}:
public Team GetTeam(ObjectId id)
{
var teams = mongoDatabase.GetCollection("Teams");
var team = teams.FindOneById(id);
....
我刚开始使用MongoDB,这样做的正确方法是什么,还是我完全使用了错误的方法?
答案 0 :(得分:0)
您可能需要在此处查看教程http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/ODataServiceSample/ODataService。似乎您缺少[FromODataUri]输入参数。
答案 1 :(得分:0)
这应该有效:
[EnableQuery]
public IHttpActionResult GetTeam([FromODataUri] string id)
{
var teams = mongoDatabase.GetCollection("Teams");
// convert the string 'id' to BsonValue 'bsonId'
......
var team = teams.FindOneById(bsonId);
// convert 'team' to the entity type Team object 'team'
......
return Ok(team);
}
然后通过以下方式查询实体集:
GET odata/Teams('542978c4e4b0e67da1edc7f3')
因为OData URL支持字符串作为参数。
答案 2 :(得分:0)
ObjectId是一个类。使用属性“键” 和注释 [FromODataUri] 。
public Team GetTeam([FromODataUri] string key)
{
var teams = mongoDatabase.GetCollection("Teams");
var team = teams.FindOneById(ObjectId.Parse(key));
...
}