Ich muss gleichzeitig eine query-Parameter-basierte Route (/api/models?id=1
) und eine routenbasierte Route (/api/models/1
) unterstützen und dennoch einen eindeutigen Zugriff auf die Modellsammlung (/api/models
) erlauben?Wie kann ich FromQuery und FromRoute-Parameter gleichzeitig binden?
Mein Controller aussieht (etwas) wie folgt aus:
[Route("/api/{controller}")]
public class ModelsController : Controller
{
[HttpGet]
public Models[] GetModels([FromQuery]QueryOptions queryOptions)
{
//...
}
[HttpGet("{id:int}")]
public Model Get([FromRoute] int id)
{
//...
}
[HttpGet("?{id:int}")]
public Model Get2Try1([FromQuery] int id)
{
//Fails with ": The literal section '?' is invalid.
//Literal sections cannot contain the '?' character."
//Which makes sense after some reading...
}
[HttpGet]
public Model Get2Try2([FromQuery] int id)
{
//Fails with "AmbiguousActionException: Multiple actions matched.
//The following actions matched route data and had all constraints satisfied:
//GetModels and Get2Try2"
//Which I think I understand as well...the absence of optional params
//means ambiguous routing...
}
[HttpGet] //What here?
public Model Get2Try3([FromQuery] int id) //and/or here?
{
}
}
Ich mag es fühlen sollte eine gewisse Art und Weise zu (mit deklarative Routing) sein erreichen dies. Hat jemand in dieser Richtung etwas unternommen?
Aktuelle Code-Basis ist ASP.NET Core (RC1), die in Kürze auf RTM/1.0 aktualisiert werden soll. Details auf beiden Seiten sind wahrscheinlich ähnlich, sind aber an beiden interessiert.
Das ist nicht für mich arbeiten. Es funktioniert als [FromRoute] und funktioniert nicht als [FromQuery] – neeohw