次の方法で共有


MVC1004: モデル バインド パラメーターの名前を変更する

価値
ルール識別子 MVC1004
修正が破壊的であるか非破壊的であるか あり

原因

モデル バインド パラメーターの名前は、プロパティの 1 つと同じです。

ルールの説明

同じ名前のプロパティを使用して複雑なパラメーターをモデルバインドすると、予期しないバインド動作が発生する可能性があります。 パラメーターの名前を変更するか、バインド属性を使用して別の名前を指定することを検討してください。

次のコードについて考えてみましょう。

public class HomeController : Controller
{
    public IActionResult Get(SearchModel search)
    {
        ...
    }
}

public class SearcModel
{
    public string Search { get; set; }
}

このモデルでは、パラメーターとそのプロパティの両方に Search という名前が付けられ、その結果、モデル バインドはプロパティを search.Searchとしてバインドしようとします。 パラメーターとそのプロパティに同じ名前を付けると、 ?search=MySearchTermのようなクエリなど、プレフィックスのない値にバインドできなくなります。

違反を修正する方法

  • バインド中にプレフィックスが使用されない場合は、パラメーターの名前を変更します。
public IActionResult Get(SearchModel model)
{
    ...
}

パブリック型のパラメーターの名前を変更すると、ライブラリのパブリック API サーフェスが変更されるため、重大な変更と見なされる可能性があります。

  • これが問題になる場合は、 Bind などのモデル バインド属性を使用して、モデル バインド プレフィックスを指定することを検討してください。
public IActionResult Get([Bind(Prefix = "")] SearchModel search)
{
    ...
}

警告を抑制するタイミング

モデル バインド中にパラメーター名をプレフィックスとして使用する場合は、警告を抑制できます。