다음을 통해 공유


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

경고를 표시하지 않는 경우

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