【问题标题】:How to route to Child controller overridden API instead of Base Controller API如何路由到子控制器覆盖的 API 而不是基本控制器 API
【发布时间】:2020-08-25 07:23:06
【问题描述】:

我有一个类库,并且在这个类库中有一组 API 控制器。

有一组 .NET Core Microservices 使用这个类库,如果他们愿意,可以在他们的实现中覆盖控制器操作方法。

基础控制器:

[ApiController]
[Route("[controller]")]
public class BaseController : Controller
{
    
    [HttpGet]
    public virtual string Get()
    {
        return "From Base class";
    }
}

儿童控制器:

public class ChildController: BaseController
{
    [HttpGet]
    public override string Get()
    {
        return "From Child class";
    }
}

现在我的问题是,如果我浏览“http://localhost:60634/base”,那么它应该点击 Child Controller Get API 而不是 Base controller Get API。

我想过使用重定向路由,但没有找到任何此类 .NET Core 微服务的博客。

请帮忙。

【问题讨论】:

  • 通常基础 API 控制器没有自己的路由,并且它们总是包含抽象登录,您希望为基类设置路由并为子控制器类设置单独路由的任何特定原因跨度>
  • 由于您在 url 中使用 base,它将从基本控制器调用方法。如果你有两个子控制器,就会混淆调用哪个子控制器方法。所以你所要求的不是一个实际的用例。你能解释一下你到底想达到什么目标吗?
  • @Saravanan 此 API 用于 HealthCheck。某些微服务不想覆盖这个实现。他们想要在基本控制器中实现它。但是一些微服务想要覆盖实现。但是我想将基类路由重定向到子类方法是调用也发生在基类上。
  • @ChetanRanpariya 此 API 用于 HealthCheck。某些微服务不想覆盖这个实现。他们想要在基本控制器中实现它。但是一些微服务想要覆盖实现。但是如果调用发生在基类获取 API 上,我想将基类路由重定向到子类获取 APU
  • @SAnilKumarDora 您应该有单独的 URL 用于每个微服务的健康检查。使用您的方法,问题仍然存在,如果有多个子类,应该调用哪个子类方法?

标签: c# asp.net-core microservices


【解决方案1】:
public class BaseController : Controller
{

    public virtual string HealthCheck()
    {
        return "From Base class";
    }
}

[ApiController]
[Route("Base")]
public class ChildController : BaseController
{
    [HttpGet]
    public override string HealthCheck()
    {
        return "From Child class";
    }
}

【讨论】:

    【解决方案2】:

    你可以这样使用:

    [ApiController]
    public class BaseController : ControllerBase
    {
    
        [Route("~/Base/Get")]
            public virtual string Get()
        {
            return  "From Base class";
        }
    }
    
    [ApiController]
    public class ChildController : BaseController
    {
        [Route("~/Child/Get")]
        public override string Get()
        {
            return "From Child class";
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-04
      • 1970-01-01
      相关资源
      最近更新 更多