给出了带有字符串主体“汉堡包”的HTTP请求我希望能够将请求的整个主体绑定到控制器操作的方法签名中的字符串参数。
当通过向相对URL string-body-model-binding-example/get-body
发出HTTP请求来调用此控制器时,出现错误,并且从未调用该操作
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace MyProject
{
[Route("string-body-model-binding-example")]
[ApiController]
public class ExampleController: ControllerBase
{
[HttpPut("get-body")]
public string GetRequestBody(string body)
{
return body;
}
}
}
using FluentAssertions;
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Xunit;
public class MyIntegrationTests : MyIntegrationTestBase
{
[Fact]
public async Task String_body_is_bound_to_the_actions_body_parameter()
{
var body = "hamburger";
var uri = "string-body-model-binding-example/get-body";
var request = new HttpRequestMessage(HttpMethod.Put, uri)
{
Content = new StringContent(body, Encoding.UTF8, "text/plain")
};
var result = await HttpClient.SendAsync(request);
var responseBody = await result.Content.ReadAsStringAsync();
responseBody.Should().Be(body,
"The body should have been bound to the controller action's body parameter");
}
}
注:在上面的示例中,测试HttpClient是使用Microsoft.AspNetCore.Mvc.Testing https://docs.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-3.1设置的。我在动作方法签名中具有POCO模型的其他控制器动作是可以到达的,所以我知道我尝试进行模型绑定的方式有问题。
编辑:我尝试过的事情:
令我惊讶的是,字符串不是supported primitives之一
摘要给定一个带有字符串主体“汉堡包”的HTTP请求,我希望能够将请求的整个主体绑定到控制器动作的方法签名中的字符串参数。通话时...
不确定是否可以通过框架手段实现,但是您可以为此创建自定义模型绑定器