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.
Si quelqu'un a une idée s'il vous plaît aider.
Merci.
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)
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é.
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.
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;
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>
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();
}
Dans votre web.config:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2147483648" />
</requestFiltering>
</security>
</system.webServer>
Editez manuellement le fichier ApplicationHost.config:
ApplicationHost.config
, localisez le noeud <requestLimits>
.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.
Enregistrez le fichier ApplicationHost.config
.