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

WireMock.Net(C#):如何构建字节数组请求匹配器

解决WireMock.Net匹配字节请求体的问题

可行实现方案

WireMock.Net的.WithBody匹配器支持直接处理字节数组,也可通过自定义逻辑完成编码转换匹配,以下是两种可靠方案:

方案1:直接匹配目标字节数组

若你明确预期的ASCII格式请求体内容,直接将字符串转为字节数组传入.WithBody即可,注意确保请求实际编码与转换编码一致:

server.Given(Request.Create()
    .WithPath("/your-api-endpoint")
    .WithMethod("POST")
    .WithBody(Encoding.ASCII.GetBytes("expected-ascii-request-body")))
.RespondWith(Response.Create()
    .WithStatusCode(200)
    .WithBody("Request matched successfully"));

方案2:自定义匹配逻辑处理编码转换

如果需要先将字节请求体转成ASCII字符串再做匹配判断,可使用.WithBodyMatcher自定义逻辑:

server.Given(Request.Create()
    .WithPath("/your-api-endpoint")
    .WithMethod("POST")
    .WithBodyMatcher(new WireMock.Matchers.BodyMatcher(
        bodyBytes => {
            // 将接收的字节数组转为ASCII字符串
            string requestBody = Encoding.ASCII.GetString(bodyBytes);
            // 这里编写你的匹配规则,比如判断是否包含指定内容
            return requestBody.Equals("target-request-content", StringComparison.Ordinal);
        })))
.RespondWith(Response.Create()
    .WithStatusCode(200)
    .WithBody("Request matched successfully"));

常见问题排查

  • 确认请求编码一致性:如果实际请求体不是ASCII编码(比如UTF-8带BOM),用Encoding.ASCII转换会导致乱码,匹配失败,可尝试替换为Encoding.UTF8,或打印字节数组的十六进制值验证内容。
  • 避免冗余转换:不要做Encoding.ASCII.GetBytes(Encoding.ASCII.GetString(bodyBytes))这类重复转换操作,编码丢失会导致匹配失效。
  • 开启调试日志定位问题:启用WireMock.Net的调试日志,可查看实际接收的请求体字节及匹配逻辑执行过程:
var settings = new WireMockServerSettings { LogLevel = LogLevel.Debug };
var server = WireMockServer.Start(settings);

内容的提问来源于stack exchange,提问作者Youcef Kelanemer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 15:07:33