2016-08-02 20 views
2

モデルコレクション(/api/models)に明白なアクセスを許可しながら、クエリパラメータベースのルート(/api/models?id=1)とルートベースのルート(/api/models/1)を同時にサポートする必要がありますか?FromQueryとFromRouteパラメータを同時にバインドする方法はありますか?

私のコントローラのルックス、このような(何か):

[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? 
    { 

    } 
} 

(宣言型ルーティングで)にいくつかの方法があるはずのように私は感じるが、これを達成。誰もこれらの行に沿って何かをしていますか?

また、現在のコードベースは、まもなくRTM/1.0にアップグレードするASP.NETコア(RC1)です。いずれの側の詳細も同様の可能性がありますが、どちらか/両方に興味があります。

答えて

3

私は次のように動作することを発見しました:キーは主にされて...

[HttpGet, Route("{id?}")] 

'?'。メソッドシグネチャに[FromX]は必要ありません。これは、クエリ文字列とルートパラメータの両方を渡すための手口です。

残念ながら闊歩UIはそれが好きですし、箱(https://github.com/domaindrivendev/Ahoy/issues/47またはhttps://github.com/domaindrivendev/Ahoy/issues/182)の外に動作するようにいくつかの明示的なパラメータを期待し、それはまた別の話:)

+0

これは私のために動作しませんだしません。 [FromRoute]として動作し、[FromQuery]として動作しません – neeohw

関連する問題