如何在 C# 中创建动态 Web api 客户端?

Posted

技术标签:

【中文标题】如何在 C# 中创建动态 Web api 客户端?【英文标题】:How to create a dynamic web api client in c#? 【发布时间】:2020-02-08 17:49:13 【问题描述】:

我开发了一个包含大约 80 个不同 api 调用的 ASP.Net web api。

我想创建一个动态的 web api 客户端,让应用程序代码保持简单,并且“web api 客户端层”可重用(无需创建 80 种不同的方法)。

我希望 Web api 客户端看起来像这样:

public dynamic WebApi(string method, params object[] list)

     // Setting the api request by the input...
     // Calling the web api...
     // Handling the results...

我希望使用它的应用看起来像这样:

List<Stations> stations = WebApi("GetStationsByCompany", companyId);

现在我觉得这是一个非常常见的用例,所以我不应该自己开发它,但是我在网上找不到这个场景的任何示例(对于 .Net Framework)。

我应该如何创建动态 Web api 客户端? 它的最佳做法是什么?

【问题讨论】:

这是一个常见问题,但您所描述的是 反模式,因为 1) 客户端永远不知道 operations 可用的内容2) 客户端永远不知道parameters are expected 是什么3) 服务器不知道parameters are legitimate 4) 代码缺乏type safety 5) 执行的任何重构都会破坏代码 - 尽管直到运行时您才会知道 如果您不想手工制作客户端代理,您可以通过 T4 模板 代码生成它们 好点,所以解决方案是创建 80 种不同的客户端方法? 你可以,但是当遇到这个问题时,我如前所述通过 T4 代码生成它们。 【参考方案1】:

如果您不想重复制作客户端 API 的任务,我建议您尝试 NSwag 工具的 swagger,它有很好的工具来完成它。 另外,我认为您提到的动态代理没有任何方法。

【讨论】:

以上是关于如何在 C# 中创建动态 Web api 客户端?的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中创建的 Web 代理需要提示进行身份验证

如何在 Grapevine 中创建动态路径

如何在 C# 中创建动态参数化 SQL 查询字符串

如何使用 MongoDB 将动态 JSON 属性发布到 C# ASP.Net Core Web API?

如何将在我的 Javascript 中创建的字符串数组传递给 C# 代码隐藏文件?

如何在 C# 中创建一个简单的代理?