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)
{
...
}
경고를 표시하지 않는 경우
모델 바인딩 중에 매개 변수 이름을 접두사로 사용하려는 경우 경고를 표시하지 않을 수 있습니다.
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
ASP.NET Core