Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何路由具有不同区域和相同名称的api控制器?_C#_Api_Model View Controller - Fatal编程技术网

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

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

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

  • JobsAdminController
    应在
    /api/admin/jobs
    上提供,并具有attr
    [RoutePrefix(“admin/jobs”)]
  • JobsController
    应在
    /api/jobs
  • JobsStatusController
    应在
    /api/jobs/status
    上提供,并具有attr
    [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
    请求
记住:

  • 将这些路由添加到默认路由之前,因为路由将按其注册的顺序匹配,并且如果先注册默认路由,
    api/admin/jobs
    将与管理员控制器匹配,其中作业作为id参数,但找不到该参数

您的意思是要将不存在的
/api/admin/jobs/jobs
请求重定向到
/api/admin/jobs/JobsAdmin
?@RezaAghaei,不,我需要获取对
/api/admin/jobs
的删除后请求,由
JobsAdminController
处理,获取对
/api/jobs
的删除后请求,并使用
JobsController
处理,因此只需为这两个URL编写两条路由即可