我想将文件上传到 asp net core web api Controller 操作方法。我发送的内容类型为“application/octet-stream”。我创建了名为 StreamInputFormatter 的自定义输入格式化程序。正在调用 streaminputformatter,但未调用 Controller 中的操作方法?并且我得到的错误是
“InvalidOperationException:此流不支持超时。”
流输入格式器:
public class StreamInputFormatter : IInputFormatter
{
public bool CanRead(InputFormatterContext context)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
var contentType = context.HttpContext.Request.ContentType;
if (contentType == "application/octet-stream")
{
return true;
}
return false;
}
public Task<InputFormatterResult> ReadAsync(InputFormatterContext context)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
var memoryStream = new MemoryStream();
context.HttpContext.Request.Body.CopyTo(memoryStream);
return InputFormatterResult.SuccessAsync(memoryStream);
}
}
Controller 操作方法:
[HttpPost("{documentType}")]
public async Task<IActionResult> CreateJob(string documentType, [FromBody]Stream template)
{
}
请您参考如下方法:
听起来您收到此错误是因为 DefaultObjectValidator 遍历了您不受支持的 Stream 属性(请参阅 issue 了解一些信息)。
要跳过 Stream 模型验证,您可以添加
services.AddMvc(options =>
{
...
options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(Stream)));
});
根据您的配置。
