在.NET Web API属性路由中,使用Route而不是RoutePrefix作为控制器级别的路由。

13

如果我使用Route属性装饰此Web API控制器,我就可以调用该方法。

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

但是如果我使用RoutePrefix,除非同时使用Route(""),否则我无法使其工作。

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

这是有意为之的吗,还是我把事情搞糟了?

谢谢


https://dev59.com/MVoV5IYBdhLWcg3wN8dD#75998447 - Billu
2个回答

22

没错,这是一种预期行为... RoutePrefix 属性本身不会向路由表中添加任何路由,而 Route 属性会...


7
你忽略了问题所在... 路由前缀仅仅是一个前缀。你需要将路径模板的一部分移到路由属性中。就像这样。
[RoutePrefix("api/v{version}")]
public class BankAccountsController : ApiController
{
    [HttpGet]
    [Route("bank-accounts")]
    public HttpResponseMessage GetBankAccounts(string version)
    {
        //...
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接