2017-01-26 1 views
0

.NET Core 1.1.0에서 사용자 정의 ModelBinder를 만들고 있는데, 대부분 생각한 것 같습니다. 내가 특별히 원하는 경우에만이 바인더를 사용하고 싶지만이 작업을 수행하는 방법을 알아낼 수는 없습니다. 나는이 모델 바인더를 호출하지 않을 때 무시하도록하고 싶지만 전화 할 때는 모두 다른 사람을 무시하기를 원합니다. 이것을 어떻게 할 수 있습니까?.NET Core에서 ModelBinder를 호출하십시오.

실현 가능한 두 가지 사항은 매개 변수 속성 [Bind][ModelBinder]이지만 두 가지 모두 실제로 작동하지 않습니다.

내가 먼저 아래 시도 :

내 사용자 지정 IModelBinderProvider이 타격
[HttpGet] 
public async Task<IActionResult> Get([Bind("test")] int userId) 
{ 
    // stuff 
} 

에서, ModelBinderProviderContext 차례에 IPropertyFilterProvider 포함하는 BindingInfo 속성이 포함되어 있습니다. 디버깅 할 때 해당 필터 공급자는 내 값이 testInclude 컬렉션을 포함합니다. 그러나 프로그래밍 방식으로이를 검사 할 방법이없는 것 같습니다. 실제로 해당 컬렉션에 액세스 할 수있는 방법은 없습니다. 아무것도 설정되어 있지 않은 경우는 null입니다. 그래서 null을 가정 할 수 있습니다 만, 이것은 매우 엉망이며 좋은 생각이 아닙니다.

설명하기는, 여기에 ModelBinderProviderContext에 대한 디버거 정보입니다 :

debugger output

다음,이 코드를 사용하여 시도 :

[HttpGet] 
public async Task<IActionResult> Get(
    [ModelBinder(BinderType = typeof(MyModelBinder))] int userId 
) 
{ 
    // stuff 
} 

이 속성이 어떤 영향을주지 않는 것으로 보인다. MyModelBinder을 강제로 사용하지는 않습니다. 모델 바인더는 Startup.cs (목록은 MvcOptions)에 지정된 순서대로 사용됩니다.

답변

0

PropertyFilterProviderIPropertyFilterProvider 인터페이스를 구현하는 BindAttribute 인스턴스를 포함합니다. 당신은 BindAttribute에 인스턴스를 캐스팅하고 Include 속성에 액세스 할 수 있습니다 :

var bindAttribute = context.BindingInfo.PropertyFilterProvider as BindAttribute; 
var include = bindAttribute?.Include; 

bindingAttributenull되는 결과 캐스트가 성공하지 못할 수 있음을 유의하십시오.

관련 문제