WEB API中的属性路由覆盖Controller中的路由

时间:2014-12-31 19:50:06

标签: asp.net-web-api asp.net-mvc-routing

我试图将属性路由添加到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 / phoneNumbers / 1时遇到500错误。如果我注释掉GetTypeOfPhoneNumbersId()函数,默认控制器GetById()工作正常。我究竟做错了什么?我不允许在ApiController中声明一个唯一的路由,因为配置的方式是什么?

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

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我相信您错过了路线中的控制器名称(phoneNumbers),这是一个有效的代码(我已对其进行了测试)

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

答案 1 :(得分:0)

您是否可以尝试访问TypeOFPhoneNumbers的资源:~api / typeOfPhoneNumbers?id = 1