MVC1004: 모델 바인딩된 매개 변수 이름 바꾸기

규칙 ID 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)
{
    ...
}

경고를 표시하지 않는 경우

모델 바인딩 중에 매개 변수 이름을 접두사로 사용하려는 경우 경고를 표시하지 않을 수 있습니다.