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);
}
}
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)
{
}
}
J'ai utilisé [DisableFormValueModelBinding]
mais j'ai toujours une erreur, alors j'utilise aussi:
if (Request.ContentLength == 0)
return BadRequest();