ASP.NET Web API中带有可选参数的属性路由

soh*_*hum 40 c# asp.net-web-api attributerouting asp.net-web-api-routing

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

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
Run Code Online (Sandbox Code Playgroud)

最后3个URL可以工作,但第一个说"在控制器名称上没有找到与请求相匹配的操作".

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

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

Kir*_*lla 67

Web API需要显式设置可选值,即使对于可以为空的类型...因此您可以尝试设置以下内容,您应该看到第一个请求成功

DateTime? parameter2 = null
Run Code Online (Sandbox Code Playgroud)

  • 您的RouteAttribute最终看起来像支持可选参数(或者如果您的路由与原始帖子一样,请求URL是什么样的)? (9认同)