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

时间:2015-09-20 19:27:12

标签: c# api model-view-controller

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

  • JobsAdminController应该在/api/admin/jobs提供并且有[RoutePrefix("admin/jobs")]
  • JobsController应该在/api/jobs
  • 上提供
  • JobsStatusController应该在/api/jobs/status提供并且有[RoutePrefix("jobs/status")]

但如果我尝试访问/api/admin/jobs,我会输入JobsController JobsAdminController。是否可以使用正确的RoutePrefix来修复,或者我必须使用HttpConfiguration更改路径?

1 个答案:

答案 0 :(得分:0)

您可以将此类路由定义放在默认路由之前:

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将匹配管理控制器,其中作业将作为无法找到的id参数。