CreateDocumentQuery(),其属性不是id

时间:2018-03-02 00:20:59

标签: linq rest api azure azure-cosmosdb

我正在尝试使用DocumentDB中除id之外的属性来查询文档。我找到了一个解决方案here,但我不确定在进行查询时该URL应该是什么。例如,在这个场景中:

var families = from f in client.CreateDocumentQuery<Family>(colSelfLink)
       where f.Address.City != "NY"
       select f;

如果是getFamilyById,则可能是http://localhost:50912/api/family/xxxxxx,其中xxxxx =家庭ID

如果if是getFamilyByCity,则不能再使用此格式:http://localhost:50912/api/family/xxxxxx其中xxxxx =城市名称。因为API会对您是选择家庭ID还是城市名称感到困惑。所以我认为我们应该使用像http://localhost:50912/api/family/byCity/xxxx这样的网址,其中xxxx =城市名称。

但我想知道我们怎样才能做到这一点?

这是我的示例代码:

namespace Family.Controllers
{
    [Produces("application/json")]
    [Route("api/Family")]
    public class FamilyController : Controller
    {
        [HttpGet]
        public async Task<IEnumerable<Family>> GetAllAsync()
        {
            var families= await FamilyProfile.DocumentDBRepository<Family>.GetIndividualsAsync(t => t.PrimaryKey != null);
            return families;
        }

        [HttpGet("{id}")]
        public async Task<IActionResult> GetByIdAsync(string id)
        {
            var family= await DocumentDBRepository<Individual>.GetFamilyAsync(id);
            if (family== null)
            {
                return NotFound();
            }
            return new ObjectResult(family);
        }

        [HttpGet("{FamilyID}")]
        [Route("/ByCity")]
        public async Task<IActionResult> GetByCityAsync(string city)
        {
            var family= await DocumentDBRepository<Family>.GetFamilyAsyncByFamilyID(city); 

            if (family== null)
            {
                return NotFound();
            }
            return new ObjectResult(family);
        }
             }
    } 

当我运行http://localhost:50912/api/family/xxxxxx并且断点没有达到GetByCityAsync(字符串城市)时,它返回404。我应该研究什么建议?谢谢!

1 个答案:

答案 0 :(得分:1)

  

所以我认为我们应该使用像http://localhost:50912/api/family/byCity/xxxx这样的网址,其中xxxx =城市名称。

根据您的描述和代码,我建议您可以修改有关GetByCityAsync的路线。

更改

[Route("/ByCity")]

[Route("ByCity/{city}")]