次のように、3 つの get メソッドが必要なリソースが 1 つある Web API を構築しています。
[HttpGet]
[Route("{city}/{streetName}/{streetNumber}/{littera}")]
public IActionResult GetByAddress([FromQuery]string city, [FromQuery]string streetName, [FromQuery]int streetNumber, [FromQuery]string littera)
{
var model = _availabilityService.FindByAddress(city, streetName, streetNumber, littera);
return Ok(model);
}
[HttpGet("{pointId}")]
public IActionResult GetByPointId(string pointId)
{
var model = _availabilityService.FindByPointId(pointId);
return Ok(model);
}
[HttpGet]
[Route("{xCoordinate}/{yCoordinate}")]
public IActionResult GetByCoordinates([FromQuery]decimal xCoordinate, [FromQuery]decimal yCoordinate)
{
var model = _availabilityService.FindByCoordinates(xCoordinate, yCoordinate);
return Ok(model);
}
パラメーター (pointId) が 1 つだけの get メソッドは、クエリ文字列ではなく ID として認識されるため、正常に機能しています。ただし、残りの 2 つの方法は、ASP.NET のルーターでは区別できないようです。
私はここで本当に途方に暮れており、なぜそれが機能しないのか理解できません。私が解決できたのは、メソッドの1つを削除すると、他のメソッドが正常に機能するということです。
私が間違っていることについて何か提案はありますか?
参考までに、対応する url:s は次のようになります。
api/1.0/availabilities?city=Metropolis&streetName=Superstreet&streetNumber=1&littera=A
と
/api/1.0/availabilities?xCoordinate=34.3444&yCoordinate=66.3422
ありがとう!