8

次のように、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

ありがとう!

4

1 に答える 1