Share via


MVC1004: 重新命名模型繫結參數

規則識別碼 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)
{
    ...
}

隱藏警告的時機

如果您想要在模型繫結期間使用參數名稱做為前置詞,則可以隱藏警告。