MVC1004: モデル バインド パラメーターの名前を変更します
Value | |
---|---|
ルール ID | 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)
{
...
}
どのようなときに警告を抑制するか
モデル バインド中にパラメーター名をプレフィックスとして使用する場合は、警告を抑制できます。
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
ASP.NET Core