You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求提供Pact Flow发布Dot Net契约及服务端验证代码

.NET 下 Pact Flow 契约发布与服务端验证代码示例

一、Consumer 端发布契约到 Pact Flow

1. 安装依赖

先安装必要的NuGet包:

Install-Package PactNet
Install-Package PactNet.Native

2. 契约编写与发布代码

using PactNet;
using PactNet.Outputters;

// 初始化Pact构建器
var pact = new PactBuilder(new PactConfig
{
    PactDir = "./pacts", // 生成的契约文件存放目录
    Outputters = new List<IOutput> { new ConsoleOutput() } // 输出日志到控制台
})
    .ServiceConsumer("DotNet Order Consumer") // 消费者服务名称
    .HasPactWith("DotNet Order Provider"); // 对应的提供者服务名称

// 定义具体的契约交互
await pact.UponReceiving("请求获取指定ID的订单")
    .Given("ID为123的订单已存在")
    .WithRequest(HttpMethod.Get, "/api/orders/123")
    .WithHeaders(new Dictionary<string, object> { { "Accept", "application/json" } })
    .WillRespond()
    .WithStatus(HttpStatusCode.OK)
    .WithHeaders(new Dictionary<string, object> { { "Content-Type", "application/json; charset=utf-8" } })
    .WithJsonBody(new
    {
        Id = 123,
        ProductName = "测试商品",
        Quantity = 2,
        Total = 99.98
    });

// 生成本地契约文件
await pact.BuildAsync();

// 发布契约到Pact Flow
var pactPublisher = new PactPublisher(new PactPublisherConfig
{
    PactBrokerUri = "https://你的Pact Flow Broker地址",
    BrokerToken = "你的Pact Flow API令牌" // 从Pact Flow控制台获取
});

await pactPublisher.PublishPactsAsync(new PublishPactOptions
{
    PactDirectory = "./pacts",
    ConsumerVersion = "1.0.0", // 当前消费者服务版本
    Tags = new List<string> { "dev", "test" } // 给契约打标签,用于环境区分
});

二、Provider 端契约验证实现

1. 安装依赖

安装Provider验证所需的NuGet包:

Install-Package PactNet.Provider
Install-Package PactNet.Native

2. 验证代码示例

using PactNet.Provider;
using PactNet.Verifier;

// 初始化验证器配置
var config = new PactVerifierConfig
{
    Outputters = new List<IOutput> { new ConsoleOutput() },
    ProviderVersion = "1.0.0" // 当前提供者服务版本
};

using var verifier = new PactVerifier(config);

verifier
    .ServiceProvider("DotNet Order Provider", "http://localhost:5000") // 本地运行的提供者服务地址
    .WithPactBrokerSource(new Uri("https://你的Pact Flow Broker地址"), options =>
    {
        options.SetBearerToken("你的Pact Flow API令牌");
        // 指定要验证的消费者契约版本(这里取dev标签下的最新版本)
        options.ConsumerVersionSelectors(new List<ConsumerVersionSelector>
        {
            new ConsumerVersionSelector { Tag = "dev", Latest = true }
        });
    })
    .Verify(); // 执行验证

3. 注意事项

  • 执行验证前,确保提供者服务已启动并运行在指定地址(示例中为http://localhost:5000)
  • 契约中的请求路径、参数、响应结构需要和实际服务逻辑匹配
  • API令牌需要从Pact Flow控制台生成,确保有对应的读写权限

内容的提问来源于stack exchange,提问作者Tushar Adsul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 20:33:24