如何路由具有不同区域和相同名称的api控制器

本文关键字:控制器 api 何路 由具有 区域 | 更新日期: 2023-09-27 18:13:42

在我的mvc应用程序中,我有三个不同的控制器:

  • JobsAdminController应该在/api/admin/jobs处可用,并且有attr [RoutePrefix("admin/jobs")]
  • JobsController, /api/jobs
  • JobsStatusController应该在/api/jobs/status处可用,并且有attr [RoutePrefix("jobs/status")]

但是如果我试图访问/api/admin/jobs,我输入JobsController而不是JobsAdminController。是否可以使用正确的RoutePrefixes或我必须使用HttpConfiguration更改路由?

如何路由具有不同区域和相同名称的api控制器

你可以把这样的路由定义放在默认路由之前:

config.Routes.MapHttpRoute(
    name: "JobsAdminRoute",
    routeTemplate: "api/admin/jobs/{id}",
    defaults: new { controller = "JobsAdmin", id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
    name: "JobsRoute",
    routeTemplate: "api/jobs/{id}",
    defaults: new { controller = "Jobs", id = RouteParameter.Optional }
);

:

  • JobsAdminController将处理api/admin/jobs请求
  • JobsController将处理api/jobs请求

记住:

  • 在默认路由之前添加这些路由,因为路由将按照它们注册的顺序匹配,如果默认路由先注册,api/admin/jobs将与没有找到的带有jobs作为id参数的管理控制器匹配。