在.net web api属性路由中的控制器级别使用Route而不是RoutePrefix

mit*_*med 13 c# asp.net-web-api attributerouting

如果我使用Route属性装饰这个web api控制器,我可以点击该方法

[Route("api/v{version}/bank-accounts")]
public class BankAccountsController : ApiController
{
    [HttpGet]
    public HttpResponseMessage GetBankAccounts()
    {
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

但是如果我使用RoutePrefix而不能让它工作,除非我同时使用Route("")

[RoutePrefix("api/v{version}/bank-accounts")]
public class BankAccountsController : ApiController
{
    [HttpGet]
    [Route("")]
    public HttpResponseMessage GetBankAccounts()
    {
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

这是打算,还是我弄乱了?

谢谢

Kir*_*lla 22

对,这是一个预期的行为... RoutePrefix属性本身不会添加任何路由到路由表,其中Route属性...


Joh*_*n C 7

你错过了......路由前缀就是前缀.您应该将路径模板的一部分移动到路由属性.像这样.

[RoutePrefix("api/v{version}")]
public class BankAccountsController : ApiController
{
    [HttpGet]
    [Route("bank-accounts")]
    public HttpResponseMessage GetBankAccounts(string version)
    {
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)