| 價值 | |
|---|---|
| 規則識別碼 | MVC1004 |
| 修正是破壞性或非破壞性 | 中斷 |
原因
模型系結參數的名稱與其其中一個屬性相同。
規則描述
模型系結具有相同名稱之屬性的複雜參數可能會導致非預期的系結行為。 請考慮重新命名參數,或使用系結屬性來指定不同的名稱。
請考慮下列程式碼:
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)
{
...
}
隱藏警告的時機
如果您想要在模型系結期間使用參數名稱做為前置詞,則可以隱藏警告。