dotnet Core中的WebApi自定义路由

时间:2019-11-05 17:33:04

标签: .net-core routing asp.net-core-webapi

在dotnet核心中,我试图创建一个webapi端点,该端点在控制器名称之前具有一个值。 例如:

模板:“ api / {AccountId} / [controller]”

端点“ api / 435ABC / Reports / EndOfYear”

我已经看到了许多有关如何在MVC和Framework 4.x中执行此操作的示例,但是对于WebApi来说却不是很多,并且我在控制器名称之前设置了参数。

1 个答案:

答案 0 :(得分:1)

属性路由中,您应将控制器路由更改为[Route("api")],以接受来自https://example.com/api的所有呼叫。

注意:它将影响 Reports 控制器内的所有路由。

[Route("api")]
public class ReportsController : ApiController

然后使用如下所示的route属性装饰您的动作:

[Route("{id}/[controller]/[action]")]

通过这种方式,您可以使用https://example.com/api/435ABC/Reports/EndOfYear调用操作方法。

基于会议的路由中,您应该仅以 UseMvc 方法添加路由,并从控制器和操作中删除 Route 属性:

app.UseMvc(routes =>
{
    routes.MapRoute(name: "default", template: "api/{controller=Home}/{action=Index}"); // this line specifies default route
    routes.MapRoute(name: "Reports", template: "api/{id}/{controller=Reports}/{action=EndOfYear}"); // this line specifies your custom route
});