C#HttpClient在修补程序请求中返回415不支持的媒体类型

我们有一个.netcore 3.1 ApiController,其端点侦听PATCH请求,并定义了用于集成/ API测试的测试服务器。

用Postman发送的PATCH请求工作正常,但是在XUnit测试中通过HttpClient发送的请求失败,并显示415不支持的媒体类型。

邮递员补丁请求: 除Bearer令牌和Content-Type外,没有其他特定标头:“ application / json”

在测试中,我们使用WebApplicationFactory并将其用作HttpClient的factory.Createclient()。

Json序列化应该不成问题,因为我是通过调试器调查内容的,而且似乎可以序列化了。

此外,我们的POST方法使用完全相同的代码即可完全使用(将“ PATCH”替换为“ POST”,等等)

期待一些建议。另外,如果您需要更多信息,请告诉我。非常感谢。

控制器:

[HttpPatch("{id}")]
public async Task<actionResult<Unit>> Edit(Edit.Command request)
{
     return await Mediator.Send(request);
}

命令:

public class Command : IRequest
{
      public string Id { get; set; }

      public JsonPatchDocument<ObjectDTO> PatchDocument { get; set; }
}

测试:

[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);
}

其中辅助方法 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");
}
a376788 回答:C#HttpClient在修补程序请求中返回415不支持的媒体类型

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2425610.html

大家都在问