首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MultipartReader问题,内容已被另一个组件读取

MultipartReader问题,内容已被另一个组件读取
EN

Stack Overflow用户
提问于 2022-06-14 14:32:01
回答 1查看 313关注 0票数 0

实现“使用流上载大文件”(https://learn.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads?view=aspnetcore-6.0)会给出以下错误:

意外结束的流,内容可能已经被另一个组件读取。

执行reader.ReadNextSectionAsync()时会发生这种情况:

代码语言:javascript
复制
[HttpPost]
[DisableFormValueModelBinding]
[ValidateAntiForgeryToken]
public async Task<IActionResult> UploadPhysical()
{
    if (!MultipartRequestHelper.IsMultipartContentType(Request.ContentType))
    {
       ModelState.AddModelError("File",
           $"The request couldn't be processed (Error 1).");
           return BadRequest(ModelState);
        }

    var boundary = MultipartRequestHelper.GetBoundary(
       MediaTypeHeaderValue.Parse(Request.ContentType),
       _defaultFormOptions.MultipartBoundaryLengthLimit);
    var reader = new MultipartReader(boundary, HttpContext.Request.Body);
    var section = await reader.ReadNextSectionAsync();

经过几个小时的努力,我决定把这个问题发到这里。

DisableFormValueModelBinding过滤器无法解决这个问题。

代码语言:javascript
复制
public void OnResourceExecuting(ResourceExecutingContext context)
{            
  var factories = context.ValueProviderFactories;
  factories.RemoveType<FormValueProviderFactory>();
  factories.RemoveType<FormFileValueProviderFactory>();
  factories.RemoveType<JQueryFormValueProviderFactory>();            
}

我正在使用Razor和.NET控制器应用程序Razor和Mvc 5.0。

EN

回答 1

Stack Overflow用户

发布于 2022-11-16 16:34:26

今天有一段节目单。同样的方法也适用于我。关键是删除所有三个提供程序;在MS示例中,只有两个被删除。

代码语言:javascript
复制
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class DisableFormValueModelBindingAttribute : Attribute, IResourceFilter
{
    public void OnResourceExecuting(ResourceExecutingContext context)
    {
        var formValueProviderFactory = context.ValueProviderFactories
            .OfType<FormValueProviderFactory>()
            .FirstOrDefault();
        if (formValueProviderFactory != null)
        {
            context.ValueProviderFactories.Remove(formValueProviderFactory);
        }

        var jqueryFormValueProviderFactory = context.ValueProviderFactories
            .OfType<JQueryFormValueProviderFactory>()
            .FirstOrDefault();
        if (jqueryFormValueProviderFactory != null)
        {
            context.ValueProviderFactories.Remove(jqueryFormValueProviderFactory);
        }

        var formFileProviderFactory = context.ValueProviderFactories
            .OfType<FormFileValueProviderFactory>()
            .FirstOrDefault();
        if (formFileProviderFactory != null)
        {
            context.ValueProviderFactories.Remove(formFileProviderFactory);
        }
    }

    public void OnResourceExecuted(ResourceExecutedContext context)
    {
    }
}

然后

代码语言:javascript
复制
[DisableFormValueModelBinding]
public async Task<IActionResult> CreateOrUpdateResource(
    [FromQuery] string session)
{
//..
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72618797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档