WEB API 中的属性路由覆盖控制器中的路由



我正在尝试将属性路由添加到 ApiController 中,如下所示:

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/电话号码/1 时收到 500 错误。如果我注释掉 GetTypeOfPhoneNumbersId() 函数,默认控制器 GetById() 工作正常。 我做错了什么?由于配置的设置方式,我是否不允许在 ApiController 中声明唯一路由?

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

感谢您的任何帮助!

我相信

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

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];
    }
}

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

最新更新