가 나는 WebApi 방법이 바인딩 :사용자 정의 부울 매개 변수 이것처럼,
public string Get([FromUri] SampleInput input)
{
//do stuff with the input...
return "ok";
}
을 입력은 다음과 같이 정의된다 : 그대로
public class SampleInput
{
// ...other fields
public bool IsAwesome { get; set; }
}
, 그것은 확인을 작동 : 나는 &isAwesome=true
를 통과하면 쿼리 문자열에서 매개 변수는 값 true
으로 초기화됩니다.
내 문제는 &isAwesome=true
과 &isAwesome=1
을 모두 true
값으로 받아들이고 싶습니다. 현재 두 번째 버전은 입력 모델에서 IsAwesome
이 false
이됩니다. 사용 Global.asax.cs을
public class BooleanNumericParameterBinding : HttpParameterBinding
{
private static readonly HashSet<string> TrueValues =
new HashSet<string>(new[] { "true", "1" }, StringComparer.InvariantCultureIgnoreCase);
public BooleanNumericParameterBinding(HttpParameterDescriptor descriptor) : base(descriptor)
{
}
public override Task ExecuteBindingAsync(
ModelMetadataProvider metadataProvider,
HttpActionContext actionContext,
CancellationToken cancellationToken)
{
var routeValues = actionContext.ControllerContext.RouteData.Values;
var value = (routeValues[Descriptor.ParameterName] ?? 0).ToString();
return Task.FromResult(TrueValues.Contains(value));
}
}
... 그리고 에 등록 : I 시도 무엇
은 주제에 다양한 블로그 게시물을 읽어 후, HttpParameterBinding
을 정의하는 것이 었습니다 :
var pb = GlobalConfiguration.Configuration.ParameterBindingRules;
pb.Add(typeof(bool), p => new BooleanNumericParameterBinding(p));
및
var pb = GlobalConfiguration.Configuration.ParameterBindingRules;
pb.Insert(0, typeof(bool), p => new BooleanNumericParameterBinding(p));
이들 중 아무 것도 작동하지 않았습니다. 내 사용자 지정 HttpParameterBinding
이 호출되지 않고 여전히 1
이 false
으로 변환되었습니다.
부울에 대해 1
을 true
으로 허용하도록 WebAPI를 구성하려면 어떻게해야합니까?
편집 : 제시된 예는 의도적으로 단순화되었습니다. 내 응용 프로그램에서 많은 입력 모델을 가지고 있으며 위에서 설명한 방법으로 처리하고 싶은 부울 필드가 많이 있습니다. 이 분야가 하나만 있다면 그러한 복잡한 메커니즘에 의지하지 않았을 것입니다.
나는'SampleAutes'에서'IsAwesome1'이라는 readonly 속성을 만들고 문자열로'IsAwesome'을 만들고, IsAwesome' =''1 '''또는''true 인 경우에만'IsAwesome1' = "' –
@ArindamNayak 예제 에서처럼 너무 많은 필드가 너무 많아서 코드가 부 풀릴 것입니다. 웹 API에서보다 우아한 방법이 있다고 생각했습니다.나는 MVC로 잠시 되돌아 가고있다. 나는 일을 잘하는'IModelBinder'를 가지고있다. – GolfWolf