Web API 2 每个控制器的通用路由

Posted

技术标签:

【中文标题】Web API 2 每个控制器的通用路由【英文标题】:Web API 2 Generic route with every controller 【发布时间】:2021-10-08 07:06:39 【问题描述】:

我正在开发 web api 2.0 并尝试实现以下 url 以访问每个控制器。我创建了一个基本控制器,我继承了每个控制器。现在我有一个场景,每个控制器都需要 Ping 方法。

您能否建议获得这条路径?

每个控制器都需要低于端点路径

https://localhost/employee/Ping

https://localhost/student/Ping

基础控制器

public class BaseController : ApiController

    [HttpGet]
    [Route("Ping")]
    public IHttpActionResult Ping()
    
        return this.Ok(HttpStatusCode.OK);

    

员工控制器

[RoutePrefix("Employee")]
public class EmployeeController : BaseController

   [HttpGet]
   [Route("GetEmployee")]
   public IHttpActionResult GetEmployee()
   
      //Implementation
      //..
   

学生控制器

[RoutePrefix("Student")]
public class StudentController : BaseController

   [HttpGet]
   [Route("GetStudent")]
   public IHttpActionResult GetStudent()
   
      //Implementation
      //..
   

【问题讨论】:

您可以使用模板Route["controller/Ping"]将Ping Endpoint添加到不同的控制器 能否提供更多的实施细节? 【参考方案1】:

通常您会有一些代码为您配置路线(取决于使用的功能/框架),例如:

 RouteTable.Routes.MapHttpRoute(name: "DefaultApi",
                                routeTemplate: "controller/action/id",
                                defaults: new  id = RouteParameter.Optional );

如您所见,还有一个设置可以在路由中包含控制器的名称。对于 MVC 控制器,为 API 端点公开的每个方法都是一个操作。

使用上述设置将自动提供 TestController 及其名为 Ping 的 HttpGet 方法,其示例 URL 为“localhost/Test/Ping”。

您仍然可以使用 RouteAttribute 和相同的模板覆盖这些路由。因此,使用 Ping 方法创建 BaseController 并添加 Route["controller/Ping"] 将使用所用控制器的名称并将其替换为路由模板路径中的占位符。例如,让 EmployeeController 实现您的 BaseController 可能会导致 Employee/Ping Url 代替。

使用您给定的代码 sn-ps:

// hint: you can also place the Route attribute on the controller to affect all methods inside it
public class BaseController : ApiController 
    [Route("controller/ping")]
    public IHttpActionResult Ping()
    
        return this.Ok(HttpStatusCode.OK);
    


public class StudentController : BaseController

   [HttpGet, Route("students")]
   public IHttpActionResult GetStudent()
   
      //Implementation
      //..
   

(还没有测试所有这些,目前只是理论;))

顺便说一句,有多个 ping 端点有什么意义,一个就足够了吗?

【讨论】:

根据您上面的评论,您应该阅读更多关于该主题的内容。看来你对 Routing 和 Web API 不是很熟悉,看一下here

以上是关于Web API 2 每个控制器的通用路由的主要内容,如果未能解决你的问题,请参考以下文章

Web API系列教程2.2 — ASP.NET Web API中的路由和动作选择机制

web api 2 路由 - 找不到资源

路由器刷breed Web控制台助手v4.0版本刷机求助

.Net Core Web API,根据值创建路由逻辑到具有相同路由前缀的不同控制器

Web-API 的路由配置

具有相同路由前缀 ASP.NET Web Api 的多个控制器类型