39

I'm trying to use Web API 2 attribute routing to set up a custom API. I've got my route working such that my function gets called, but for some reason I need to pass in my first parameter for everything to work properly. The following are the URLs I want to support:

http://mysite/api/servicename/parameter1
http://mysite/api/servicename/parameter1?parameter2=value2
http://mysite/api/servicename/parameter1?parameter2=value2&parameter3=value3
http://mysite/api/servicename/parameter1?parameter2=value2&parameter3=value3&p4=v4

The last 3 URLs work but the first one says "No action was found on the controller 'controller name' that matches the request."

My controller looks like this:

public class MyServiceController : ApiController
{
    [Route("api/servicename/{parameter1}")]
    [HttpGet]
    public async Task<ReturnType> Get(string parameter1, DateTime? parameter2, string parameter3 = "", string p4 = "")
    {
        // process
    }
}
abatishchev
  • 98,240
  • 88
  • 296
  • 433
sohum
  • 3,207
  • 2
  • 39
  • 63

1 Answers1

67

Web API requires to explicitly set optional values even for nullable types...so you can try setting the following and you should see your 1st request succeed

DateTime? parameter2 = null
mbomb007
  • 3,788
  • 3
  • 39
  • 68
Kiran
  • 56,921
  • 15
  • 176
  • 161
  • 9
    What did your RouteAttribute end up looking like to support the optional parameters (or what does the request URL look like if your route is simply like the original post)? – Colin Feb 26 '15 at 06:03