2015-09-20 152 views
0

在我的MVC应用程序,我有三个不同的控制器:如何路由具有不同区域和相同名称的api控制器?

  • 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更改路线?

+0

你的意思是说你想将不存在的'/ api/admin/jobs/Jobs'的请求重定向到'/ api/admin/jobs/JobsAdmin'? –

+0

@RezaAghaei,不,我需要GET POST DELETE请求到'/ api/admin/jobs'来处理'JobsAdminController'和GET POST DELETE请求到'/ api/jobs'处理'JobsController' – FLCL

+0

所以简单写2这两个网站的路线 –

回答

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参数不会找到一个管理控制器。
相关问题