title: Custom method names in ASP.NET Web API
body: <p>I'm converting from the WCF Web API to the new ASP.NET MVC 4 Web API. I have a UsersController, and I want to have a method named Authenticate. I see examples of how to do GetAll, GetOne, Post, and Delete, however what if I want to add extra methods into these services? For instance, my UsersService should have a method called Authenticate where they pass in a username and password, however it doesn't work.</p>
  
  <pre><code>public class UsersController : BaseApiController
  {
      public string GetAll()
      {
          return "getall!";
      }
  
      public string Get(int id)
      {
          return "get 1! " + id;
      }
  
      public User GetAuthenticate(string userName, string password, string applicationName)
      {
          LogWriter.Write(String.Format("Received authenticate request for username {0} and password {1} and application {2}",
              userName, password, applicationName));
  
          //check if valid leapfrog login.
          var decodedUsername = userName.Replace("%40", "@");
          var encodedPassword = password.Length &gt; 0 ? Utility.HashString(password) : String.Empty;
          var leapFrogUsers = LeapFrogUserData.FindAll(decodedUsername, encodedPassword);
  
          if (leapFrogUsers.Count &gt; 0)
          {
              return new User
              {
                  Id = (uint)leapFrogUsers[0].Id,
                  Guid = leapFrogUsers[0].Guid
              };
          }
          else
              throw new HttpResponseException("Invalid login credentials");
      }
  }
  </code></pre>
  
  <p>I can browse to myapi/api/users/ and it will call GetAll and I can browse to myapi/api/users/1 and it will call Get, however if I call myapi/api/users/authenticate?username={0}&amp;password={1} then it will call Get (NOT Authenticate) and error:</p>
  
  <blockquote>
    <p>The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.String Get(Int32)' in 'Navtrak.Services.WCF.NavtrakAPI.Controllers.UsersController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.</p>
  </blockquote>
  
  <p>How can I call custom method names such as Authenticate?</p>