gpt4 book ai didi

c# - 在 Web Api Controller 操作中使用正文流参数

转载 作者:太空狗 更新时间:2023-10-29 20:38:30 24 4
gpt4 key购买 nike

我目前从正文中读取输入流是这样的:

public async Task<IActionResult> Post()
{
byte[] array = new byte[Request.ContentLength.Value];

using (MemoryStream memoryStream = new MemoryStream(array))
{
await Request.Body.CopyToAsync(memoryStream);
}

return Ok();
}

由于测试和 swagger 生成,我想在方法签名中指定输入参数。

是否可以通过某种方式将输入参数指定为流?

public async Task<IActionResult> Post([FromBody]Stream body) ...

最佳答案

您必须为流创建模型绑定(bind)器:

public class StreamBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
bindingContext.Result = ModelBindingResult.Success(bindingContext.HttpContext.Request.Body);
return Task.CompletedTask;
}
}

然后你应该为它创建模型 Binder 提供者:

public class StreamBinderProvider : IModelBinderProvider
{
public IModelBinder GetBinder(ModelBinderProviderContext context)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}

if (context.Metadata.ModelType == typeof(Stream))
{
return new BinderTypeModelBinder(typeof(StreamBinder));
}

return null;
}
}

并注册它:

public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(options =>
{
options.ModelBinderProviders.Insert(0, new StreamBinderProvider());
});
}

用法:

public async Task<IActionResult> Post([FromBody]Stream body) ...

关于c# - 在 Web Api Controller 操作中使用正文流参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43086909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com