我试图使用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 = family id
如果if是getFamilyByCity,则不能再使用此格式:http://localhost:50912/api/family/xxxxxx其中xxxxx =城市名称。因为API会对您是选择家庭ID还是城市名称感到困惑。所以我认为我们应该使用像http://localhost:50912/api/family/byCity/xxxx这样的URL,其中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。我应该研究什么建议?谢谢!
所以我认为我们应该使用像http://localhost:50912/api/family/byCity/xxxx这样的URL,其中xxxx =城市名称。
根据您的描述和代码,我建议您可以修改有关GetByCityAsync的路由。
更改
[Route("/ByCity")]
至
[Route("ByCity/{city}")]