Example #1
0
        public ValueTask InvokeAsync(IServerFilterContext context, Func <ValueTask> next)
        {
            var result = new DivideByResult {
                IsSuccess = true
            };

            // invoke ValidateParameterAttribute.Validate for marked method parameters
            var parameters = context.ServiceMethodInfo.GetParameters();

            for (var i = 0; i < parameters.Length; i++)
            {
                var parameter = parameters[i];
                foreach (var attribute in parameter.GetCustomAttributes <ValidateParameterAttribute>())
                {
                    attribute.Validate(context.Request[i], parameter.Name, result);
                }
            }

            if (!result.IsSuccess)
            {
                // skip the method: pass non-success result to the client
                context.Response[0] = result;
                return(new ValueTask(Task.CompletedTask));
            }

            // call the method
            return(next());
        }
Example #2
0
 public override void Validate(object parameterValue, string parameterName, DivideByResult result)
 {
     if (Equals(Value, parameterValue))
     {
         result.IsSuccess = false;
         result.ErrorMessages.Add(string.Format("{0} cannot be {1}.", parameterName, Value));
     }
 }
Example #3
0
        public ValueTask <DivideByResult> DivideByAsync(int value, [Not(0), GreaterThan(10)] int divider, CancellationToken token)
        {
            var result = new DivideByResult
            {
                IsSuccess = true,
                Result    = value / divider
            };

            return(new ValueTask <DivideByResult>(result));
        }
Example #4
0
 public override void Validate(object parameterValue, string parameterName, DivideByResult result)
 {
     if (parameterValue is int typedValue)
     {
         if (typedValue <= Value)
         {
             result.IsSuccess = false;
             result.ErrorMessages.Add(string.Format("{0} must be greater than {1}.", parameterName, Value));
         }
     }
     else
     {
         result.IsSuccess = false;
         result.ErrorMessages.Add(string.Format("{0} must be Int32.", parameterName));
     }
 }
Example #5
0
 public abstract void Validate(object parameterValue, string parameterName, DivideByResult result);