MongoDB ODataController获取方法

时间:2014-10-01 18:42:57

标签: c# mongodb asp.net-web-api odata mongodb-.net-driver

如何将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,这样做的正确方法是什么,还是我完全使用了错误的方法?

3 个答案:

答案 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));
    ...
}