在ASP.NET Web API中使用可选参数的属性路由

我正在尝试使用Web API 2属性路由来设置自定义API。 我有我的路线工作,以便我的函数被调用,但出于某种原因,我需要传递我的第一个参数,一切工作正常。 以下是我想要支持的url:

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 

最后3个URL可以工作,但是第一个URL说:“在控制器的控制器名称上找不到与请求匹配的操作”。

我的控制器看起来像这样:

 public class MyServiceController : ApiController { [Route("api/servicename/{parameter1}")] [HttpGet] public async Task<ReturnType> Get(string parameter1, DateTime? parameter2, string parameter3 = "", string p4 = "") { // process } } 

Web API需要显式地设置可选值,即使是可为空的types也是如此…所以你可以尝试设置下面的内容,你应该看到你的第一个请求成功

 DateTime? parameter2 = null