如何从现有控制器自动生成改装接口?



我正在调查改装库并评估我是否值得集成到我的项目中。

假设我有一个控制器,它接受具有特定协定的POST消息:

[Route("api/[controller]")]
[ApiController]
public class KeepAliveController : ControllerBase
{
[HttpPost]
public IActionResult Post(KeepAliveContract keepAliveContract)
{
// 
}
}

根据我从refit文档中了解到的内容,我必须创建一个接口。我们称之为IKeepAliveService.它看起来像这样:

public interface IKeepAliveService
{
[Post("api/keepalive")]
Task SendKeepAliveAsync(KeepAliveContract keepAliveContract);
}

如果我弄乱了PostAttribute或签名本身中的路由,这种做事方式会导致潜在的运行时错误。

问题

有没有办法从现有控制器自动生成此接口,从而降低错误的风险?

当然,您可以使用 C# 9 源生成器或 Fody IL 编织来执行此操作。

但另一种解决方案是在 Refit 库之上使用带有代码修复的实时 Roslyn 分析器,并让它处理类型安全客户端的生成。 因为与其重新发明轮子,为什么不节省时间和精力,并在已经存在、记录、稳定和维护的东西(如 Refit(的基础上进行构建,而不是滚动自己的实施。

为了使分析器正常工作,您必须在 Web API 配置中按操作名称启用路由,并且每个控制器都必须实现其相应的 Refit 接口。

// routing by action name
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);

分析器将检查路由属性中指定的路由字符串是否与方法签名匹配。 如果检测到无效路由,编译器将报告编译错误并提供修复。

这样,您的路由字符串中永远不会出错,即使您这样做,编译器也会立即通知您!!

这是我制作的简单 Refit 路由分析器的代码,因此您不必这样做,它完全符合我的描述,我已经尝试过并且效果很好,所以请随意自定义它您想要的任何方式!

PS:编程的第一条规则是不要重新发明轮子。

有一个工具(仅限win(可以安装它,然后您可以通过cmd生成改装界面。 https://github.com/Dreamescaper/GenerateAspNetCoreClient

我需要同样的东西,所以我构建了一个名为Refitter的工具,该工具从OpenAPI规范文件生成接口和合约。

OpenAPI 规范文件可以通过在 ASP.NET Core 项目上启用 Swagger 和 SwaggerUI 来生成

因为我懒得离开Visual Studio来生成代码,所以我还构建了一个名为REST API客户端代码生成器的Visual Studio扩展,它允许我右键单击调用API的客户端系统中的OpenAPI规范文件。

您只需右键单击类名称,从上下文菜单中选择自定义操作,然后单击提取界面

相关内容

  • 没有找到相关文章

最新更新