Web 中具有多个参数的属性路由 API 2

Attributed Routing with multiple parameters in Web API 2

我正在尝试使用 Web 进行属性路由 API 2. 我已经定义了一个路由前缀,并且有两种方法。第一个有效,但第二个失败

[RoutePrefix("api/VolumeCap")]
public class VolumeCapController : ApiController
{            
        [Route("{id:int}")]
        public IEnumerable<CustomType> Get(int id)
        {
        }

        [Route("{id:int}/{parameter1:alpha}")]
            public CustomType Get(int id, string parameter1)
        {
        }
    }

http://localhost/MyWebAPI/api/VolumeCap/610023 //This works http://localhost/MyWebAPI/api/VolumeCap/610023?parameter1=SomeValue //This does not work

我收到以下错误

The requested resource does not support http method 'GET'.

我似乎遗漏了一些明显的东西,但我无法弄清楚。

如果您使用

定义路线
[RoutePrefix("api/VolumeCap")]

[Route("{id:int}/{parameter1:alpha}")]

您的 url 必须如下所示:

api/VolumeCap/[IdValue]/[Parameter1Value]

而不是这样:

api/VolumeCap/[IdValue]?parameter1=[Parameter1Value]

您的 url 将匹配具有此属性 [Route("{id:int}")] 但具有附加参数 parameter1 的方法,即

[Route("{id:int}")]
public IEnumerable<CustomType> Get(int id, string parameter1)

这是因为 select 操作的第一步是将路由与提供的 URL 匹配,其中不包括查询字符串,而仅包括 url段(由 / 分隔)。路由匹配后,从查询字符串中读取附加参数,但仅在路由匹配之后。