我有一个WireMock API设置用于测试目的.首先,我使用简短的方法对我的WireMock端点进行REST调用:

var response = await _httpClient.PostAsJsonAsync("resorce/someRoute", obj);

这根本不起作用,我总是得到一个"找不到"的回复.经过大量的调试,没有发现任何关于REST调用和WireMock设置的问题,我try 了详细的方法来完成相同的功能:

var json = new StringContent(JsonSerializer.Serialize(obj),
    Encoding.UTF8, "application/json");

var response = await _httpClient.PostAsync("resorce/someRoute", json);

这次成功了!据我所知,两人都是same thing分.

有什么问题吗?这是WireMock的事情还是PostAsJsonAsync可能导致不同的行为?

这里有short code example

推荐答案

PostAsJsonAsync使用JsonSerializerDefaults.Web作为序列化器选项,这将导致JSON中的Camel大小写属性名称,而JsonSerializer.Serialize(obj)将使用默认的选项,导致Pascal大小写(匹配属性名称).有多种方法可以处理.例如,更改PostAsJsonAsync的设置:

var response = await httpCLient.PostAsJsonAsync("/hello-world", obj, new JsonSerializerOptions());

或者使用Camel case 作为对象:

_server.Given(
    Request.Create()
        .WithPath("/hello-world")
        .UsingPost()
        .WithBodyAsJson(new { command = "Say hello"} ))

Csharp相关问答推荐

Rx.Net -当关闭序列被触发时如何聚合消息并发出中间输出?

在依赖性注入和继承之间进行 Select

ASP.NET Core:如何在IPageFilter中注入ApplicationDbContext

C#自定义字典与JSON(de—)serialize

应该使用哪一个?"_counter += 1 OR互锁增量(ref_counter)"""

并行令牌更新

Microsoft. VisualBasic. FileIO. FileSystem. MoveFile()对话框有错误?

C++/C#HostFXR通过std::tuple传递参数

无法创建';';类型的';DbContext';.异常';无法解析类型';Microsoft.EntityFrameworkCore.DbContextOptions`1[Comm的服务

如何使用C#中的主构造函数功能使用多个构造函数?

将类移动到新命名空间后更新RavenDB Raven-Clr-Type

DbContext-传递自定义配置选项

为什么ReadOnlySpan;T&>没有Slice(...)的重载接受Range实例的?

我找不到ASP.NET Web应用程序(.NET框架).已 Select .NET框架项目和项模板以及此组件(&Q;)

当我try 在与XAMP的MySQL服务器连接的ASP.NET核心应用程序中添加迁移时出现错误

C#LINQ延迟执行和嵌套方法

如何使用实体框架核心对字符串_agg使用强制转换为varchar(Max)

将列表转换为带有逗号分隔字符串形式的值的字典

如果所有";async任务方法()";调用都返回Task.FromResult()-是否同步执行?

这是T自身的布尔表达式是什么意思?