내가 올바르게 이해한다면 실제로 원하는 것은 사용자 정의 모델 바인더라고 생각합니다.
public class NoBooleanModelBinder : IModelBinder
{
public bool BindModel(
HttpActionContext actionContext,
ModelBindingContext bindingContext)
{
if (bindingContext.ModelType != typeof(string))
{
return false; //we only want this to handle string models
}
//get the value that was parsed
string modelValue = bindingContext.ValueProvider
.GetValue(bindingContext.ModelName)
.AttemptedValue;
//check if that value was "true" or "false", ignoring case.
if (modelValue.Equals(bool.TrueString, StringComparison.OrdinalIgnoreCase) ||
modelValue.Equals(bool.FalseString, StringComparison.OrdinalIgnoreCase))
{
//add a model error.
bindingContext.ModelState.AddModelError(bindingContext.ModelName,
"Values true/false are not accepted");
//set the value that will be parsed to the controller to null
bindingContext.Model = null;
}
else
{
//else everything was okay so set the value.
bindingContext.Model = modelValue;
}
//returning true just means that our model binder did its job
//so no need to try another model binder.
return true;
}
}
그럼 당신은 당신의 컨트롤러에이 같은 일을 할 수 있습니다
public object Post([ModelBinder(typeof(NoBooleanModelBinder))]string somevalue)
{
if(this.ModelState.IsValid) { ... }
}
는 OnActionExecuting (HttpActionContext ActionContext에)'등이 MVC 또는 WebAPI인가의'WebAPI 필터와'OnActionExecuting (ActionExecutingContext ActionContext에)는 '것입니다 MVC가 될까요? 잘못된 유형의 ActionFilterAttribute가있을 수 있습니다. 이것이 MVC인지 WebAPI인지 알 수 있다면 예제를 드릴 수 있습니다. –
웹 API입니다. 문자열을 기다리고있는 컨트롤러에 부울을 보낼 때 프레임 워크는 진정한 부울을 "실제"문자열로 변환합니다. 나는 이것이 프레임 워크에 의해 상자에서 수행 된 것 같아요하지만 내가 이것을 제어하고 문자열 대신 bool을 보내면 유효성 검사 메시지를 보여주고 싶습니다. – user441365