Skip to content

Commit 4535465

Browse files
Fix error System.IO.InvalidDataException: Multipart body length limit (#617)
* Fix error System.IO.InvalidDataException: Multipart body length limit 134217728 exceeded making that limit configurable and with a default of 500MB instead of 128MB * Adjust DEFAULT_MAX_FILE_UPLOAD_SIZE_BYTES to 528MB * Settings read at Startup were not using the standard mechanism of Config which considers the environment variables overriding values defined at appsettings.json as reviewed by @ggallotti
1 parent 7e396e2 commit 4535465

File tree

2 files changed

+17
-19
lines changed

2 files changed

+17
-19
lines changed

dotnet/src/dotnetcore/GxClasses.Web/Middleware/HandlerFactory.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public class AppSettings
2020
public BaseUrls BaseUrls { get; set; }
2121
public bool AnalyticsEnabled { get; set; }
2222
public int SessionTimeout { get; set; }
23+
public int MaxFileUploadSize { get; set; }
2324
}
2425

2526
public class BaseUrls
@@ -32,7 +33,6 @@ public class BaseUrls
3233
public class HandlerFactory
3334
{
3435
private static readonly ILog log = log4net.LogManager.GetLogger(typeof(GeneXus.HttpHandlerFactory.HandlerFactory));
35-
private readonly AppSettings _appSettings;
3636
private string _basePath;
3737
static Dictionary<string, Type> _aspxObjects = new Dictionary<string, Type>(){
3838
{"gxoauthlogout",typeof(GXOAuthLogout)},
@@ -63,14 +63,13 @@ public class HandlerFactory
6363
public HandlerFactory()
6464
{
6565
}
66-
public HandlerFactory(RequestDelegate next, IOptions<AppSettings> appSettings)
66+
public HandlerFactory(RequestDelegate next)
6767
{
68-
_appSettings = appSettings.Value;
68+
6969
}
70-
public HandlerFactory(RequestDelegate next, IOptions<AppSettings> appSettings, String basePath)
70+
public HandlerFactory(RequestDelegate next, String basePath)
7171
{
7272
_basePath = basePath;
73-
_appSettings = appSettings.Value;
7473
}
7574

7675

dotnet/src/dotnetcore/GxNetCoreStartup/Startup.cs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
using System;
22
using System.Collections.Generic;
33
using System.IO;
4-
using System.Reflection;
54
using System.Net;
65
using System.Threading.Tasks;
76
using GeneXus.Configuration;
87
using GeneXus.Http;
98
using GeneXus.HttpHandlerFactory;
109
using GeneXus.Services;
1110
using GeneXus.Utils;
12-
using GxClasses.Helpers;
1311
using GxClasses.Web.Middleware;
1412
using log4net;
1513
using Microsoft.AspNetCore;
@@ -18,12 +16,12 @@
1816
using Microsoft.AspNetCore.Diagnostics;
1917
using Microsoft.AspNetCore.Hosting;
2018
using Microsoft.AspNetCore.Http;
19+
using Microsoft.AspNetCore.Http.Features;
2120
using Microsoft.AspNetCore.Mvc;
2221
using Microsoft.AspNetCore.Rewrite;
2322
using Microsoft.AspNetCore.Routing;
2423
using Microsoft.AspNetCore.Server.Kestrel.Core;
2524
using Microsoft.AspNetCore.StaticFiles;
26-
using Microsoft.Extensions.Configuration;
2725
using Microsoft.Extensions.DependencyInjection;
2826
using Microsoft.Extensions.FileProviders;
2927
using Microsoft.Extensions.Logging;
@@ -95,6 +93,7 @@ public class Startup
9593

9694
static readonly ILog log = log4net.LogManager.GetLogger(typeof(Startup));
9795
const int DEFAULT_SESSION_TIMEOUT_MINUTES = 20;
96+
const int DEFAULT_MAX_FILE_UPLOAD_SIZE_BYTES = 528000000;
9897
public static string VirtualPath = string.Empty;
9998
public static string LocalPath = Directory.GetCurrentDirectory();
10099

@@ -115,22 +114,14 @@ public class Startup
115114

116115
public Startup(Microsoft.AspNetCore.Hosting.IHostingEnvironment env)
117116
{
118-
119-
var builder = new ConfigurationBuilder()
120-
.SetBasePath(env.ContentRootPath)
121-
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
122-
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
123-
.AddEnvironmentVariables();
124117
GXRouting.ContentRootPath = env.ContentRootPath;
125118
GXRouting.UrlTemplateControllerWithParms = "controllerWithParms";
126-
Config.ConfigRoot = builder.Build();
127119
GxContext.IsHttpContext = true;
128120
gxRouting = new GXRouting(REST_BASE_URL);
129121
}
130122
public void ConfigureServices(IServiceCollection services)
131123
{
132124
services.AddMvc(option => option.EnableEndpointRouting = false);
133-
services.Configure<AppSettings>(Config.ConfigRoot.GetSection("AppSettings"));
134125
services.Configure<KestrelServerOptions>(options =>
135126
{
136127
options.AllowSynchronousIO = true;
@@ -141,17 +132,25 @@ public void ConfigureServices(IServiceCollection services)
141132
options.AllowSynchronousIO = true;
142133
});
143134
services.AddDistributedMemoryCache();
144-
AppSettings settings = new AppSettings();
145-
Config.ConfigRoot.GetSection("AppSettings").Bind(settings);
146135

136+
services.Configure<FormOptions>(options =>
137+
{
138+
if (Config.GetValueOf("MaxFileUploadSize", out string MaxFileUploadSizeStr) && int.TryParse(MaxFileUploadSizeStr, out int MaxFileUploadSize))
139+
options.MultipartBodyLengthLimit = MaxFileUploadSize;
140+
else
141+
options.MultipartBodyLengthLimit = DEFAULT_MAX_FILE_UPLOAD_SIZE_BYTES;
142+
});
147143
ISessionService sessionService = GXSessionServiceFactory.GetProvider();
148144

149145
if (sessionService != null)
150146
ConfigureSessionService(services, sessionService);
151147
services.AddHttpContextAccessor();
152148
services.AddSession(options =>
153149
{
154-
options.IdleTimeout = TimeSpan.FromMinutes(settings.SessionTimeout==0 ? DEFAULT_SESSION_TIMEOUT_MINUTES : settings.SessionTimeout);
150+
if (Config.GetValueOf("SessionTimeout", out string SessionTimeoutStr) && int.TryParse(SessionTimeoutStr, out int SessionTimeout))
151+
options.IdleTimeout = TimeSpan.FromMinutes(SessionTimeout);
152+
else
153+
options.IdleTimeout = TimeSpan.FromMinutes(DEFAULT_SESSION_TIMEOUT_MINUTES);
155154
options.Cookie.HttpOnly = true;
156155
options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
157156
options.Cookie.IsEssential = true;

0 commit comments

Comments
 (0)