web-dev-qa-db-fra.com

Fin inattendue de Stream, il est possible que le contenu ait déjà été lu par un autre composant. Microsoft.AspNetCore.WebUtilities.MultipartReaderStream

Je reçois une exception lorsque j'essaie de lire un contenu en plusieurs parties à partir de la demande, en disant que le contenu a peut-être déjà été lu par un autre composant.

 if (MultipartRequestHelper.IsMultipartContentType(Request.ContentType))
            {
                // Used to accumulate all the form url encoded key value pairs in the 
                // request.
                var formAccumulator = new KeyValueAccumulator();

                var boundary = Request.GetMultipartBoundary();
                var reader = new MultipartReader(boundary, HttpContext.Request.Body);
                var section = await reader.ReadNextSectionAsync();
                while (section != null)
                {
                    ContentDispositionHeaderValue contentDisposition;
                    var hasContentDispositionHeader =
                        ContentDispositionHeaderValue.TryParse(section.ContentDisposition, out contentDisposition);
                }
            }
5
Sunil Buddala

Il s'est avéré que je devais désactiver la liaison du modèle de valeur de formulaire à l'aide de l'attribut ci-dessous.

[HttpPost]
    [Route("")]
    [DisableFormValueModelBinding]
    public async Task<IActionResult> Post()

L'implémentation de l'attribut est ci-dessous

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class DisableFormValueModelBindingAttribute : Attribute, IResourceFilter
{
    public void OnResourceExecuting(ResourceExecutingContext context)
    {
        var factories = context.ValueProviderFactories;
        factories.RemoveType<FormValueProviderFactory>();
        factories.RemoveType<JQueryFormValueProviderFactory>();
    }

    public void OnResourceExecuted(ResourceExecutedContext context)
    {
    }
}
6
Sunil Buddala

J'ai utilisé [DisableFormValueModelBinding] mais j'ai toujours une erreur, alors j'utilise aussi:

if (Request.ContentLength == 0)
                return BadRequest();
0
Random Lyrics