考虑下面的自定义模型联编程序:
[ModelBinder(typeof(CustomModelBinder))]
public class StreamModel
{
public MemoryStream Stream
{
get;
set;
}
}
public class CustomModelBinder : IModelBinder
{
public async Task BindModelAsync(ModelBindingContext bindingContext)
{
var request = bindingContext.HttpContext.Request;
var ms = new MemoryStream();
request.Body.CopyTo(ms);
bindingContext.Result = ModelBindingResult.Success(new StreamModel
{
Stream = ms
});
}
}
ms.Length
的值始终等于0
。有什么方法可以在ModelBinder中读取请求主体?
另外以下情况对我来说似乎很奇怪:
public class TestController : Controller
{
[HttpPost]
public IActionResult Test(string data)
{
var ms = new MemoryStream();
request.Body.CopyTo(ms);
return OK(ms.Length);
}
}
它总是返回
0
。但是,当删除参数
string data
时,它将返回发布主体的实际长度。 最佳答案
问题是您尝试多次读取请求正文。
有关替代方法和更多信息,您应该看一下以下问题:
Read request body twice
关于c# - 在自定义ModelBinder中使用Request.Body,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48297331/