가치 | |
---|---|
규칙 아이디 | 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