2012-04-26 4 views
11

背景:(ActionNameConstraintは、カスタムIRouteConstraintある)MVC4 Web APIの[Bind(Prefix = "principalId")]に相当しますか?

public ActionResult ActionName([Bind(Prefix = "principalID")] int userID, 
           [Bind(Prefix = "dependentID")] long applicationID) 

次のようにこのアクションのルートが定義されました:MVC3で

、私はカスタムActionパラメータ名を指定するには、次の構文を使用しました:

routes.MapHttpRoute(
    "DependantAction", 
    "{controller}/{principalID}/{action}/{dependentID}", 
    new {controller = @"[^0-9]+", action = ActionNameConstraint.Instance, dependentID = RouteParameter.Optional} 
    ); 

質問:

BindAttributeは、System.Web.Mvcクラスです。 Web Apiにこれと同等のもの(パラメータバインディング)がありますか?

もちろん、同じ結果を達成するための他の解決策がある場合は、私はそれらを聞いてみたいです!

答えて

-2

WebAPIでは、特別なコントローラークラスベースと特別なアクション名を使用していますが、コントローラーとアクションであることを理解しています。

試してもうまくいかなかったのですか?この記事をざっと見てみると正常に動作するはずです(ではないが、特定の属性)、一般的に結合モデルを提案しているようだ:

http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx

編集:

がいくつかは、これが唯一のMVCで動作するはずと言うと、答えを下落させた。ここでは、複数の参照を行く:

+0

私はこの記事を実際に見直しましたが、実際には同じ目的を達成していません - 記事は主にモデルバインディングをカバーしています(ほとんどの検索で実際にモデルバインドに関する結果が得られました) – diaho

+1

ASP.NET Web APIでは'BindAttribute'機能が組み込まれています。アクションパラメータのバインドは、Web APIのモデルバインディングと書式設定機能で行われます。だから、モデルバインダーだけではありません。もう一つのヒントは、ASP.NET Web APIで 'System.Web.Mvc'名前空間で何も使用しないことです。99%の時間、あなたがこれを行うなら、あなたは困っているでしょう。 – tugberk

+0

更新された回答を確認してください。 – Meligy

5

あなたが結合モデルに用いられるパラメータ名を指定するSystem.Web.Http.FromUriAttribute属性を使用することができます。

public ActionResult ActionName(
        [FromUri(Name = "principalID.userID")] int userID, 
        [FromUri(Name= "dependentID.applicationID")] long applicationID 
        ) 

FromUriクエリ文字列とリクエストのRouteDataを調べるために、結合モデルに指示します。

+1

残念ながら、このメソッドはインクルードのためにのみ機能します。除外を指定する場合は、自分で行う必要があります。 –

関連する問題