C# 如何路由具有不同区域和相同名称的api控制器?
在我的mvc应用程序中,我有三个不同的控制器:C# 如何路由具有不同区域和相同名称的api控制器?,c#,api,model-view-controller,C#,Api,Model View Controller,在我的mvc应用程序中,我有三个不同的控制器: JobsAdminController应在/api/admin/jobs上提供,并具有attr[RoutePrefix(“admin/jobs”)] JobsController应在/api/jobs JobsStatusController应在/api/jobs/status上提供,并具有attr[RoutePrefix(“作业/状态”)] 但是,如果我试图访问/api/admin/jobs,我会输入JobsController,而不是Job
应在JobsAdminController
上提供,并具有attr/api/admin/jobs
[RoutePrefix(“admin/jobs”)]
应在JobsController
/api/jobs
应在JobsStatusController
上提供,并具有attr/api/jobs/status
[RoutePrefix(“作业/状态”)]
但是,如果我试图访问
/api/admin/jobs
,我会输入JobsController
,而不是JobsAdminController
。是否可以使用正确的RoutePrefixes进行修复,或者我必须使用HttpConfiguration
更改路由?您可以将此类路由定义放在默认路由之前:
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
- 将这些路由添加到默认路由之前,因为路由将按其注册的顺序匹配,并且如果先注册默认路由,
将与管理员控制器匹配,其中作业作为id参数,但找不到该参数api/admin/jobs
/api/admin/jobs/jobs
请求重定向到/api/admin/jobs/JobsAdmin
?@RezaAghaei,不,我需要获取对/api/admin/jobs
的删除后请求,由JobsAdminController
处理,获取对/api/jobs
的删除后请求,并使用JobsController
处理,因此只需为这两个URL编写两条路由即可