title: FluentValidation Doesn't Work When Using WebApi [Route] Attribute
body: <p>I successfully implemented FluentValidation in my WebApi project controller that only had one HttpGet method. When I added another HttpGet method, I added route attribute to both methods. i.e. [Route("Method1")] and [Route("Method2")].</p>
  
  <p>Now the ModelState comes back as true regardless of whether I enter any data or not.</p>
  
  <p>Here is my code.</p>
  
  <p><strong>WebApiConfig</strong></p>
  
  <pre><code>public static class WebApiConfig
  {
      public static void Register(HttpConfiguration config)
      {
  
          config.Filters.Add(new ValidateModelStateFilter());
  
          //FluentValidation
          FluentValidationModelValidatorProvider.Configure(config);
  
          // Web API routes
          config.MapHttpAttributeRoutes();
  
          config.Routes.MapHttpRoute(
              name: "DefaultApi",
              routeTemplate: "{action}/{id}",
              defaults: new { controller = "Menu", id = RouteParameter.Optional}
          );
  
  
      }
  }
  </code></pre>
  
  <p><strong>ValidateModelStateFilter</strong></p>
  
  <pre><code>public class ValidateModelStateFilter : ActionFilterAttribute
  {
      public override void OnActionExecuting(HttpActionContext actionContext)
      {
          if (!actionContext.ModelState.IsValid)
          {
              actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState);
          }
      }
  }
  </code></pre>
  
  <p><strong>Controller</strong></p>
  
  <pre><code>[HttpGet]
  [Route("Method1")]
  public IHttpActionResult ReadAllMenusByApplication([FromUri] ReadAllMenusByApplicationInput input)
  {
          var result = new List&lt;ApplicationMenu&gt;();
          ...
  }
  </code></pre>
  
  <p><strong>Input Object</strong></p>
  
  <pre><code>using FluentValidation;
  using FluentValidation.Attributes;
  
  namespace MenuService.Models
  {
  [Validator(typeof(ReadAllMenusByApplicationInputValidator))]
  public class ReadAllMenusByApplicationInput
  {
      public ReadAllMenusByApplicationInput() {
          this.ApplicationName = string.Empty;
      }
  
      /// &lt;summary&gt;
      /// The MenuSystem name of the application
      /// &lt;/summary&gt;
      public string ApplicationName { get; set; }
  }
  
  public class ReadAllMenusByApplicationInputValidator : AbstractValidator&lt;ReadAllMenusByApplicationInput&gt;
  {
      public ReadAllMenusByApplicationInputValidator()
      {
          RuleFor(x =&gt; x.ApplicationName).NotEmpty();
      }
  }
  </code></pre>
  
  <p>}</p>