Asp.net web api WEB API中的属性路由覆盖控制器中的路由

Asp.net web api WEB API中的属性路由覆盖控制器中的路由,asp.net-web-api,asp.net-mvc-routing,Asp.net Web Api,Asp.net Mvc Routing,我尝试将属性路由添加到ApicController,如下所示: public class PhoneNumbersController : ApiController { // GET BY ID public PhoneNumber GetById(int id) { return PhoneNumbersSelect(id)[0]; } // GET BY ID TypeOFPhoneNumbers/Id [Route("ap

我尝试将属性路由添加到ApicController,如下所示:

public class PhoneNumbersController : ApiController
{
    // GET BY ID
    public PhoneNumber GetById(int id)
    {
        return PhoneNumbersSelect(id)[0];
    }

    // GET BY ID TypeOFPhoneNumbers/Id
    [Route("api/typeOfPhoneNumbers/{id}")]
    public TypeOfPhoneNumber GetTypeOfPhoneNumberById(int id)
    {
        return TypeOfPhoneNumbersSelect(id)[0];
    }
}
我的配置如下所示:

config.Routes.MapHttpRoute(
     name: "DefaultApi",
     routeTemplate: "api/{controller}/{id}",
     defaults: new { id = RouteParameter.Optional }
);
尝试调用api/phoneNumbers/1时出现500错误。如果我注释掉getTypeOfPhoneNumberId()函数,则默认控制器GetById()可以正常工作。我做错了什么?由于配置的设置方式,是否不允许我在ApiController中声明唯一路由

另外,正如我刚刚发现的,调用api/typeOfPhoneNumbers/1会返回404错误,因此路由根本不起作用


谢谢你的帮助

我相信您错过了路线中的控制器名称(电话号码),这是一个工作代码(我已经测试过了)


你能试着像这样访问TypeOFPhoneNumbers的资源吗:~api/TypeOFPhoneNumbers?id=1

路由是如何配置的?我知道这是旧的,但…
[Route(“~/api/TypeOFPhoneNumbers/{id}”)]
我想要在同一个控制器上这样的路由:“api/phoneNumbers/1”api/TypeOFPhoneNumbers/1”。
public class PhoneNumbersController : ApiController
{
    // GET BY ID
    [HttpGet]
    public PhoneNumber GetById(int id)
    {
        return PhoneNumbersSelect(id)[0];
    }

    // GET BY ID TypeOFPhoneNumbers/Id
    [HttpGet]
    [Route("api/phoneNumbers/typeOfPhoneNumbers/{id:int}")]
    public TypeOfPhoneNumber GetTypeOfPhoneNumberById(int id)
    {
        return TypeOfPhoneNumbersSelect(id)[0];
    }
}