C#HttpClient在补丁请求时返回415种不支持的媒体类型
我们有一个.netcore 3.1 ApiController,其端点监听补丁请求,并定义了一个用于集成/API测试的测试服务器 使用Postman发送的补丁请求工作正常,但通过XUnit测试中的HttpClient发送的请求失败,媒体类型为415,不受支持 邮递员修补程序请求: 除了承载令牌和内容类型“application/json”之外,没有其他特定的头 在测试中,我们将WebApplicationFactory及其factory.CreateClient()用于我们的HttpClient Json序列化不应该有问题,因为我通过调试器查看了内容,它似乎序列化得很好 此外,我们的POST方法完全是开箱即用的,代码完全相同(将“补丁”替换为“POST”等) 期待一些建议。如果你需要更多的信息,请告诉我。非常感谢 控制器:C#HttpClient在补丁请求时返回415种不支持的媒体类型,c#,rest,.net-core,patch,http-status-code-415,C#,Rest,.net Core,Patch,Http Status Code 415,我们有一个.netcore 3.1 ApiController,其端点监听补丁请求,并定义了一个用于集成/API测试的测试服务器 使用Postman发送的补丁请求工作正常,但通过XUnit测试中的HttpClient发送的请求失败,媒体类型为415,不受支持 邮递员修补程序请求: 除了承载令牌和内容类型“application/json”之外,没有其他特定的头 在测试中,我们将WebApplicationFactory及其factory.CreateClient()用于我们的HttpClient
[HttpPatch("{id}")]
public async Task<ActionResult<Unit>> Edit(Edit.Command request)
{
return await Mediator.Send(request);
}
其中,helper方法AddJsonContent定义为:
public void AddJsonContent(HttpRequestMessage request, object content)
{
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string serializedContent = JsonConvert.SerializeObject(content);
request.Content = new StringContent(serializedContent, Encoding.UTF8, "application/json");
}
[InlineData(/* inline data goes here */)]
public async void TestEdit_Ok(/* required parameters for the test */)
{
var request = new HttpRequestMessage(new HttpMethod("PATCH"), url));
request.Headers.Add("Authorization", "Bearer " + token);
/* create patch document logic goes here */
var command = new Command()
{
Id = target,
PatchDocument = patchDocument,
};
_testHelper.AddJsonContent(request, command);
// Act
var response = await _client.SendAsync(request);
// Assert
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
}
public void AddJsonContent(HttpRequestMessage request, object content)
{
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string serializedContent = JsonConvert.SerializeObject(content);
request.Content = new StringContent(serializedContent, Encoding.UTF8, "application/json");
}