如何使用具有不同参数类型的相同路由?

How to use the same route with different parameter types?

我有一个 Api 控制器,它有两个采用不同参数类型的不同操作。

    // GET: users/sample%40email.com
    [Route("users/{emailAddress}")]
    public IHttpActionResult GetUser(string emailAddress)

    // GET: users/1D8F6B90-9BD9-4CDD-BABB-372242AD9960
    [Route("users/{reference}")]
    public IHttpActionResult GetUserByReference(Guid reference)

问题是当我向其中任何一个发出请求时,发现多个操作匹配。查看其他答案,我认为我需要像这样在 WebApiConfig 中设置路由...

            config.Routes.MapHttpRoute(
            name: "apiEmail",
            routeTemplate: "api/{controller}/{action}/{email}"
            );

        config.Routes.MapHttpRoute(
            name: "apiReference",
            routeTemplate: "api/{controller}/{action}/{reference}"
            );

我需要做什么才能根据传入的参数类型调用每个动作?

我对 Web.Api 很陌生,如有任何额外的解释文字,我们将不胜感激。

您喜欢以下启用属性路由的方法声明: //用guid 1st

声明方法
// GET: users/1D8F6B90-9BD9-4CDD-BABB-372242AD9960
[Route("users/{reference:guid}")]
public IHttpActionResult GetUserByReference(Guid reference)

并像下面这样声明其他方法

// GET: users/sample%40email.com
[Route("users/{emailAddress}")]
public IHttpActionResult GetUser(string emailAddress)

请告诉我,这适合你吗?