2017-01-05 4 views
1

私は自分のアプリケーションのルーティングを単純化しようとしました。このような何かにWebApiパスパラメータを要求本体であるクラスにプッシュする方法は可能ですか?

[Route("api/campaign/{campaignId}/launch")] 
public HttpResponseMessage LaunchCampaign(long campaignId, CampaignLaunchRequest request) 
{ 

    //do job 
} 

:私はこれを変更する方法を見つけることを試みた

[Route("api/campaign/{request.Id}/launch")] 
public HttpResponseMessage LaunchCampaign(CampaignLaunchRequest request) 
{ 
    //do job 
} 

を私は何とかいくつかのクラスであるリクエストボディにパス変数をプッシュすることはできますか?

[Route("api/campaign/{request.Id}/launch")] 

「要求」は、クラスCampaignLaunchRequestid

はそれも可能です。このクラスのフィールド/プロパティですか?

+0

はい、可能ですが、このルートのMvcRouteHandlerを作成してロジックを追加する必要があります。 –

答えて

2

私は同様の使用例を持ち、カスタムモデルバインダーの「ModelBinder」属性クラスを使用してこれを達成できました。あなたの場合、例えば

[Route("api/campaign/{campaignId}/launch")] 
public HttpResponseMessage LaunchCampaign([ModelBinder(typeof(MyCustomModelBinder))] 
CampaignLaunchRequest request) 
{ 

    //do job 
} 

ModelBinderを作成するには、this pageを確認することができますが、基本的には、要求を解析し、それぞれを実行します「MyCustomModelBinder」内に独自の「CampaignLaunchRequest」オブジェクトを作成しますあなたのメソッドが呼び出される時刻

関連する問題