【问题标题】:How can I create dynamic API's in ASP.net Core 2如何在 ASP.net Core 2 中创建动态 API
【发布时间】:2020-03-08 07:58:50
【问题描述】:

我需要知道如何通过调用另一个 API 然后传递 [API name][API parameters]动态地创建 API,让我们假设我们有这个 API,如下所示:

[HttpPost("GenerateApi")]
[ProducesResponseType(200)]
[ProducesResponseType(500)]
public IActionResult GenerateApi(RootObject ro)
{           
   //Here I need piece of code to create API dynamically
   return Ok(new { ro.apiName, ro.parameters });       
}

以下是模型:

public class RootObject
{
   public string apiName { get; set; }
   public List<parameter> parameters { get; set; }
}

public class parameter
{
   public string parameterName { get; set; }
   public dynamic parameterType { get; set; }
}

现在需要做的是在控制器中创建动态API

那么我们将创建 API,它们可以像这样从他们的 URL 调用

www.example.com/api/v1/[controller]/[apiName]/{[parameter1_value]}/{[parameter2_value]}

能否请您提供一些有关这方面的见解。

【问题讨论】:

  • 听起来是个很糟糕的主意.....这有什么意义?您应该遵循系统设计的 SOLID 原则 - 其中的 S 代表 单一责任原则,它表示一段代码应该执行 一件事只有一件事
  • 感谢您的评论,我想让用户通过调用此 API [GenerateApi] 来动态创建他的 API,如果您有其他好的想法或建议,请帮助@marc_s
  • 感谢您的帮助,我会阅读文档@Richard
  • 您可以使用查询参数。有一些代码可以做到这一点,并在this repo 中使用ExpandoObject 生成对象。有一个很好的课程可以配合它,如果您可以摆动子成本,那将是值得的。

标签: c# api controller asp.net-core-2.1


【解决方案1】:

在这篇有用的文章中找到了解决方案Here,用于在 .net 核心中生成动态控制器。

【讨论】:

    【解决方案2】:

    发现一些东西可以在 MVC 中有所帮助。如果其他人正在寻找这个,我需要覆盖 DefaultHttpControllerSelector。这是一篇关于这个主题的非常好的文章:link 所以基本上对于我上面提到的用例,我需要创建一个新的 AppDomain,在其中启动我的服务,并在运行时动态加载我的程序集。我最后需要覆盖 DefaultHttpControllerSelector 来捕获请求。当请求到达时,它可以控制我要使用的控制器。在那里,我可以通过加载新程序集等来动态更新控制器。要注意的主要是每个请求都会执行此操作,因此它很容易影响性能和内存。所以我将实现我自己的控制器缓存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      • 2023-01-27
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多