ASP.NET CORE如何使用RPC调用其他API接口

问题描述 投票:0回答:2

我现在有一个asp.net core web api的新项目,我用它作为主要语言,但是有些接口是用java完成的,现在公司已经改为asp.net core作为主要语言。我可以再次使用asp.net core来完成这些接口,但是没有意义。于是网上查了资料,建议我用rpc来调用之前的接口。我该怎么办?

以其中一个java接口为例

@ApiOperation(value = "Send email registration verification code")
    @GetMapping("send_code")
    public JsonData sendRegisterCode(@ApiParam("Recipient") @RequestParam(value = "to", required = true) String to,
                                     @ApiParam("Verification code") @RequestParam(value = "captcha", required = true) String captcha,
                                     HttpServletRequest request
    ) {

        String key = getCaptchaKey(request);
        String cacheCaptcha = redisTemplate.opsForValue().get(key);
        //Matching graphic verification code

        if (captcha != null && cacheCaptcha != null && captcha.equalsIgnoreCase(cacheCaptcha)) {
            //success
            redisTemplate.delete(key);
            JsonData jsonData = notifyService.sendCode(SendCodeEnum.USER_REGISTER, to);
            return jsonData;

        } else {
            return JsonData.buildResult(BizCodeEnum.CODE_CAPTCHA_ERROR);
        }

    }

    private String getCaptchaKey(HttpServletRequest request) {
        String ip = CommonUtil.getIpAddr(request);
        String userAgent = request.getHeader("User-Agent");
        String key = "user-service:captcha:" + CommonUtil.MD5(ip + userAgent);
        return key;
    }

如何调用修改后的api?非常感谢有关文档和代码的任何建议!

asp.net-core rpc
2个回答
0
投票

现在是2024/05/21了,我也有类似的需求,写了一个Library来实现一个基于ASP.NET Core的简单的RPC框架

ProjectFolder/
|
├── ServiceA/
|   ├── SampleRpcController.cs    <-- Implement RPC via interface (Server Side)
|   ├── Program.cs
|   └── ...
|
├── ServiceA.Shared/
|   ├── ISampleRpcService.cs      <-- Define RPC interface (Shared Project)
|   └── ...
|
├── ServiceB/
|   ├── AppController.cs          <-- Call RPC via interface (Client Side)
|   ├── Program.cs
|   └── ...

跟着感觉走:

  • RPC Interface
     提供的一些 
    Attributes
     定义 
    ASP.NET Core
// In ServiceA.Shared/ISampleRpcService.cs
[HttpRoute("/api/v1/public")]
public interface ISampleRpcService : IRpcController
{
    [HttpGet("int")]
    int Add(int a, int b);
}
  • 使用控制器(服务器端)在服务 A 中实现
    RPC Interface
// In ServiceA/SampleRpcService.cs
public class SampleRpcController : ControllerBase, ISampleRpcService
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}
  • 通过服务B(客户端)中的
    RPC Interface
    调用RPC服务器
// In ServiceB/AppController.cs
public class AppController
{
    private readonly ISampleRpcService _sampleRpcService;

    public AppController(ISampleRpcService sampleRpcService)
    {
        _sampleRpcService = sampleRpcService;
    }

    public int CallRPC()
    {
        return _sampleRpcService.Add(1, 2);
    }
}

如果您有兴趣,欢迎使用这个库!


-1
投票

可以使用grpc模板创建项目:

enter image description here

参考文档:

https://learn.microsoft.com/en-us/aspnet/core/grpc/?view=aspnetcore-3.1

如果你想在现有项目上使用,可以这样做:

1.添加所需的NuGet包:

Install-Package Grpc.Net.Client
Install-Package Google.Protobuf
Install-Package Grpc.Tools

2.添加greet.proto

在 gRPC 客户端项目中创建 Protos 文件夹。

将 gRPC Greeter 服务中的 Protos\greet.proto 文件复制到 gRPC 客户端项目中的 Protos 文件夹。

将greet.proto文件中的命名空间更新为项目的命名空间 命名空间: 选项 csharp_namespace = "GrpcGreeterClient";

添加一个项目组,其中包含引用greet.proto文件的元素:

<ItemGroup>
  <Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
</ItemGroup>

3.创建Greeter客户端和使用gRPC Greeter服务测试gRPC客户端的具体步骤可参考官方文档:

https://learn.microsoft.com/en-us/aspnet/core/tutorials/grpc/grpc-start?view=aspnetcore-6.0&tabs=visual-studio

© www.soinside.com 2019 - 2024. All rights reserved.