web-dev-qa-db-fra.com

Augmenter la taille du fichier de téléchargement dans le noyau Asp.Net

Actuellement, je travaille avec Asp.Net Core et MVC6 doivent télécharger une taille de fichier illimitée. J'ai cherché sa solution mais je n'ai toujours pas trouvé la réponse.

J'ai essayé ce lien

Si quelqu'un a une idée s'il vous plaît aider.

Merci.

31
Itsathere

Les autres réponses résolvent la restriction IIS. Cependant, à partir de ASP.NET Core 2.0, le serveur Kestrel impose également ses propres limites par défaut.

Github de KestrelServerLimits.cs

Annonce de la taille maximale de la requête et de la solution (citées ci-dessous)

Instructions MVC

Si vous souhaitez modifier la limite de taille maximale du corps de la demande pour une action ou un contrôleur MVC spécifique, vous pouvez utiliser l'attribut RequestSizeLimit. Les éléments suivants autoriseraient MyAction à accepter des corps de requête allant jusqu'à 100 000 000 octets.

[HttpPost]
[RequestSizeLimit(100_000_000)]
public IActionResult MyAction([FromBody] MyViewModel data)
{

[DisableRequestSizeLimit] peut être utilisé pour rendre la taille de la requête illimitée. Cela restaure efficacement le comportement antérieur à la version 2.0.0 pour l'action ou le contrôleur attribué.

Instructions génériques sur le middleware

Si la demande n'est pas traitée par une action MVC, la limite peut toujours être modifiée par demande à l'aide de la variable IHttpMaxRequestBodySizeFeature. Par exemple:

app.Run(async context =>
{
    context.Features.Get<IHttpMaxRequestBodySizeFeature>().MaxRequestBodySize = 100_000_000;

MaxRequestBodySize est un long nullable. La définition de cette valeur sur null désactive la limite telle que [DisableRequestSizeLimit] de MVC.

Vous ne pouvez configurer la limite d’une demande que si l’application n’a pas encore commencé à lire; sinon une exception est levée. Une propriété IsReadOnly vous indique si la propriété MaxRequestBodySize est en lecture seule, ce qui signifie qu’il est trop tard pour configurer la limite.

Instructions de configuration globale

Si vous souhaitez modifier globalement la taille maximale du corps de la requête, vous pouvez modifier une propriété MaxRequestBodySize dans le rappel de UseKestrel ou UseHttpSys. MaxRequestBodySize est un long nullable dans les deux cas. Par exemple:

.UseKestrel(options =>
{
    options.Limits.MaxRequestBodySize = null;

ou

.UseHttpSys(options =>
{
    options.MaxRequestBodySize = 100_000_000;
47

Vous obtenez probablement un code de statut HTTP 404.13 lorsque vous téléchargez un fichier de plus de 30 Mo. Si vous exécutez votre application ASP.Net Core dans IIS, le pipeline IIS intercepte votre demande avant qu'elle ne frappe votre application.

Mettez à jour votre web.config:

<system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
    <!-- Add this section for file size... -->
    <security>
      <requestFiltering>
        <!-- Measured in Bytes -->
        <requestLimits maxAllowedContentLength="1073741824" />  <!-- 1 GB-->
      </requestFiltering>
    </security>
  </system.webServer>

Les applications ASP.Net précédentes avaient également besoin de cette section, mais ce n'est plus nécessaire dans Core car vos requêtes sont gérées par un middleware:

  <system.web>
    <!-- Measured in kilobytes -->
    <httpRuntime maxRequestLength="1048576" />
  </system.web>
28
Ashley Lee

Dans un projet ASP.NET Core 1.1 créé par Visual Studio 2017, si vous souhaitez augmenter la taille du fichier de téléchargement. Vous devez créer le fichier web.config vous-même et ajouter le contenu suivant:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <security>
      <requestFiltering>
        <!-- 1 GB -->
        <requestLimits maxAllowedContentLength="1073741824" />
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>

Dans le fichier Startup.cs, ajoutez le contenu suivant:

public void ConfigureServices(IServiceCollection services)
{
  services.Configure<FormOptions>(x =>
  {
      x.ValueLengthLimit = int.MaxValue;
      x.MultipartBodyLengthLimit = int.MaxValue;
      x.MultipartHeadersLengthLimit = int.MaxValue;
  });

  services.AddMvc();
}
16
haiwuxing
  1. Dans votre web.config:

    <system.webServer>
      <security>
        <requestFiltering>
          <requestLimits maxAllowedContentLength="2147483648" />
        </requestFiltering>
      </security>
    </system.webServer>
    
  2. Editez manuellement le fichier ApplicationHost.config:

    1. Cliquez sur Démarrer. Dans la zone Rechercher, tapez Bloc-notes. Cliquez avec le bouton droit sur le bloc-notes, puis cliquez sur "Exécuter en tant qu'administrateur".
    2. Dans le menu Fichier, cliquez sur Ouvrir. Dans la zone Nom de fichier, tapez "% windir%\system32\inetsrv\config\applicationhost.config", puis cliquez sur Ouvrir.
    3. Dans le fichier ApplicationHost.config, localisez le noeud <requestLimits>.
    4. Supprimez la propriété maxAllowedContentLength. Vous pouvez également ajouter une valeur correspondant à la taille de l'en-tête Content-Length que le client envoie dans le cadre de la demande. Par défaut, la valeur de la propriété maxAllowedContentLength est 30000000.

       enter image description here

    5. Enregistrez le fichier ApplicationHost.config.

1
Thomas Verhoeven