【问题标题】:Route Prefix VS Controller Name ( Web api )路由前缀 VS 控制器名称(Web api)
【发布时间】:2017-06-10 17:34:35
【问题描述】:

我想知道如果我们在 Web api 控制器中使用与控制器实际名称不同的名称的 RoutePrefix 属性。那么它会起作用吗?

据我所知

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

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

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

【问题讨论】:

  • 确保首先启用属性路由config.MapHttpAttributeRoutes(),然后路由前缀将按预期工作。 asp.net/web-api/overview/web-api-routing-and-actions/…
  • 它已启用但仍无法正常工作,因为我不想在每个方法上添加路由,因为如果我这样做,我的路由将是 /quotation/getall,这是不正确的。我认为Get应该是/quotation
  • 您在 getall 方法上使用默认路由 Route("")。但是,如果您要实现属性路由,则必须使用它。它的名字
  • 是的,这很完美。这是我缺少的东西。谢谢兄弟!
  • @Nkosi 在 Visual Studio 中如果您创建 Web api 控制器,则 config.MapHttpAttributeRoutes() 会自动添加到 WebApiConfig.cs。

标签: c# asp.net-mvc asp.net-web-api asp.net-mvc-routing attributerouting


【解决方案1】:

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

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

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

}

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

【讨论】:

  • @Willmore 是我从 OP 复制代码时的拼写错误。固定的。谢谢指正。
【解决方案2】:

为了让它工作,你需要在你的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:

  • 引用/示例
  • 报价/另一个

【讨论】:

  • 如果我没有在特定控制器中为我的方法添加路由怎么办?
  • @AhsanAttari,Route 和 RoutePrefix 携手并进。 asp.net/web-api/overview/web-api-routing-and-actions/…
  • 当您想使用路由时,您应该在每个操作中添加[Route]。如果你想要一个到控制器的 路由前缀 的路由,你可以像@Nkosi 建议的那样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 2019-08-28
  • 1970-01-01
相关资源
最近更新 更多