public FileGlobalConfigurationFluentValidator(FileQoSOptionsFluentValidator fileQoSOptionsFluentValidator) { RuleFor(configuration => configuration.QoSOptions) .SetValidator(fileQoSOptionsFluentValidator); }
public ReRouteFluentValidator(IAuthenticationSchemeProvider authenticationSchemeProvider, HostAndPortValidator hostAndPortValidator, FileQoSOptionsFluentValidator fileQoSOptionsFluentValidator) { _authenticationSchemeProvider = authenticationSchemeProvider; RuleFor(reRoute => reRoute.QoSOptions) .SetValidator(fileQoSOptionsFluentValidator); RuleFor(reRoute => reRoute.DownstreamPathTemplate) .NotEmpty() .WithMessage("{PropertyName} cannot be empty"); RuleFor(reRoute => reRoute.UpstreamPathTemplate) .NotEmpty() .WithMessage("{PropertyName} cannot be empty"); When(reRoute => !string.IsNullOrEmpty(reRoute.DownstreamPathTemplate), () => { RuleFor(reRoute => reRoute.DownstreamPathTemplate) .Must(path => path.StartsWith("/")) .WithMessage("{PropertyName} {PropertyValue} doesnt start with forward slash"); RuleFor(reRoute => reRoute.DownstreamPathTemplate) .Must(path => !path.Contains("//")) .WithMessage("{PropertyName} {PropertyValue} contains double forward slash, Ocelot does not support this at the moment. Please raise an issue in GitHib if you need this feature."); RuleFor(reRoute => reRoute.DownstreamPathTemplate) .Must(path => !path.Contains("https://") && !path.Contains("http://")) .WithMessage("{PropertyName} {PropertyValue} contains scheme"); }); When(reRoute => !string.IsNullOrEmpty(reRoute.UpstreamPathTemplate), () => { RuleFor(reRoute => reRoute.UpstreamPathTemplate) .Must(path => !path.Contains("//")) .WithMessage("{PropertyName} {PropertyValue} contains double forward slash, Ocelot does not support this at the moment. Please raise an issue in GitHib if you need this feature."); RuleFor(reRoute => reRoute.UpstreamPathTemplate) .Must(path => path.StartsWith("/")) .WithMessage("{PropertyName} {PropertyValue} doesnt start with forward slash"); RuleFor(reRoute => reRoute.UpstreamPathTemplate) .Must(path => !path.Contains("https://") && !path.Contains("http://")) .WithMessage("{PropertyName} {PropertyValue} contains scheme"); }); When(reRoute => reRoute.RateLimitOptions.EnableRateLimiting, () => { RuleFor(reRoute => reRoute.RateLimitOptions.Period) .NotEmpty() .WithMessage("RateLimitOptions.Period is empty"); RuleFor(reRoute => reRoute.RateLimitOptions) .Must(IsValidPeriod) .WithMessage("RateLimitOptions.Period does not contain integer then s (second), m (minute), h (hour), d (day) e.g. 1m for 1 minute period"); }); RuleFor(reRoute => reRoute.AuthenticationOptions) .MustAsync(IsSupportedAuthenticationProviders) .WithMessage("{PropertyName} {PropertyValue} is unsupported authentication provider"); When(reRoute => string.IsNullOrEmpty(reRoute.ServiceName), () => { RuleFor(r => r.DownstreamHostAndPorts).NotEmpty() .WithMessage("When not using service discovery DownstreamHostAndPorts must be set and not empty or Ocelot cannot find your service!"); }); When(reRoute => string.IsNullOrEmpty(reRoute.ServiceName), () => { RuleForEach(reRoute => reRoute.DownstreamHostAndPorts) .SetValidator(hostAndPortValidator); }); }