2017-11-21 59 views
0

모델 속성 유효성 검사를 작동 시키려고하지만 문자열 속성에 null 값을 허용하려고합니다. 내가 확인하기 위해 노력하고있어모델 등록 정보 유효성 확인하지만 null 값 허용

속성은 다음과 같습니다

public string PhoneNumber { get; set;} 

를 그리고 난 이런 식의 유효성을 검사하고 : 유효성 검사는 값이있는 경우를 제외하고 내 경우에는 잘 작동

[Phone(ErrorMessage = "Invalid telephone number.")] 
public string PhoneNumber { get; set;} 

객체가있는 API에 전화 번호로 전송되지 않습니다.

[AllowNullValue] 속성과 같은 것이 있거나 null 값이 "전화"속성을 전달하는 방법은 무엇입니까?

UPDATE (안톤 Gorbunov의 게시물) : PhoneAttribute의 IsValid Metod의 첫 번째 명령이기 때문에 그것은 이상한 보이는

{ 
    "Message": "An error has occurred.", 
    "ExceptionMessage": "The field is not a valid phone number.", 
    "ExceptionType": "System.ComponentModel.DataAnnotations.ValidationException", 
    "StackTrace": " at System.ComponentModel.DataAnnotations.ValidationAttribute.Validate(Object value, String name)\r\n at RABE_BCV_API.Controllers.APIController.UpsertMember(MemberModel memberObject) in C:\\Users\\John\\Documents\\Visual Studio 2015\\Projects\\RABE_BCV_API\\RABE_BCV_API\\Controllers\\APIController.cs:line 29\r\n at lambda_method(Closure , Object , Object[])\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters)\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()" 
} 

답변

0

입니다 :

public override bool IsValid(object value) { 
      if (value == null) { 
       return true; 
      } 
... 
} 

은 아마 당신은 사용 [필수] 또는 [BindRequired ] 속성?

+0

어디에서 찾았습니까? 내가 오른쪽 클릭하고 정의로 이동하면 내 속성은 ... "public override bool IsValid (object value);"라고만 말합니다. – John

+0

'Tools -> Options -> Debugging -> General'에서'Enable .NET Framework sources stepping' 체크 박스를 설정했습니다. 'PhoneAttribute'의 인스턴스 생성 및 디버거의 명시적인 호출'Validate (object, string)'메소드와 Step into –

+0

첫 번째 게시물에서 업데이트를보십시오. – John