2012-11-23 2 views
6

を満たした私は、コントローラのメソッドを持っています。オプションのパラメータは、常に

public ActionResult SendNotification(Guid? id=null, SendNotification notification =null) 

それは/Apps/SendNotification/{guid}?{SendNotification properties}

のSendNotificationは、複数の文字列プロパティを持つモデルであるに応答します。

私の問題は、SendNotificationは決してnullではないということです。どのように私はアクションを呼び出しても、.NETは常にSendNotificationのオブジェクトをインスタンス化するようです(すべてのフィールドがnullの場合)。

さらに私はSystem.Web.Http.FromUriSystem.Web.Http.FromBodyでテストしましたが、それでもやります。

アイデア?

注:これはWebApiではありません。これは通常のMVCです。

routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
+0

あなたのルートは何ですか? –

+0

上記に追加されました。注:私のオリジナル投稿では、私の要求のURLに誤りがありました(私はそれを修正しました)。 – rufo

答えて

2

モデルがあなたをだましバインドされています

私のプロジェクトでは、デフォルトルートのみを持っています。

モデルにバインドするパラメータが見つからないため、すべてのプロパティはnullですが、モデルはデフォルトではまだインスタンス化されています。

Modelがnullであることを確認する代わりに、メインプロパティ(IDなど)の1つがnullであることを確認してください。

+1

ok ...その回避策は動作しますが、それは私のバグのようです。なぜそれにつながるデータがない場合、C#はモデルをインスタンス化する必要がありますか? – rufo

+0

私はそれをバグとは見ません。モデルバインダーは、どのパラメーターを探すかを知るためにモデルをインスタンス化する必要があります。次に、一致したプロパティに値をバインドします。見つからない場合は何もバインドされません。 –

+0

私は答えとしてそれを受け入れました(論理C#が本当に好きではありませんが)。ありがとう。 – rufo

関連する問題