路由前缀 VS 控制器名称 ( Web api )

Route Prefix VS Controller Name ( Web api )

我想知道如果我们在 Web api 控制器中使用与控制器实际名称不同的 RoutePrefix 属性。那么到底行不行呢?

据我所知

[RouterPrefix("quotation")]
public class SaleOrderController : ApiController { ... }

如果我们像上面那样定义 RoutePrefix,我们将无法通过 /quotation 访问它,但我们可以使用 saleorder 访问它。

那么 RoutePrefix 是为了什么还是我做错了什么?

为了使其正常工作,您需要在 WebApiConfig.Register() 方法中调用以下代码:

config.MapHttpAttributeRoutes();

所以你的 RoutePrefix 工作正常:

[RoutePrefix("quotation")]
public class SaleOrderController : ApiController
{
    [Route("example")]
    [HttpGet]
    public IHttpActionResult Example()
    {
        return Ok();
    }

    [Route("another")]
    [HttpGet]
    public IHttpActionResult Another()
    {
        return Ok();
    }

}

因此您可以像这样访问您的 API:

  • quotation/example
  • quotation/another

要使用默认路由,请使用 Route("")

[RoutePrefix("quotation")]
public class SaleOrderController : ApiController {

    //GET quotation
    [Route("")]
    [HttpGet]
    public IHttpActionResult GetAll() { ... }

}

来源:Attribute Routing in ASP.NET Web API 2 : Route Prefix