using System; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Mvc.Filters; namespace StardewModdingAPI.Web.Framework { /// A filter which increases the maximum request size for an endpoint. /// Derived from . [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] public class AllowLargePostsAttribute : Attribute, IAuthorizationFilter, IOrderedFilter { /********* ** Fields *********/ /// The underlying form options. private readonly FormOptions FormOptions; /********* ** Accessors *********/ /// The attribute order. public int Order { get; set; } /********* ** Public methods *********/ /// Construct an instance. public AllowLargePostsAttribute() { this.FormOptions = new FormOptions { ValueLengthLimit = 200 * 1024 * 1024 // 200MB }; } /// Called early in the filter pipeline to confirm request is authorized. /// The authorization filter context. public void OnAuthorization(AuthorizationFilterContext context) { IFeatureCollection features = context.HttpContext.Features; IFormFeature? formFeature = features.Get(); if (formFeature?.Form == null) { // Request form has not been read yet, so set the limits features.Set(new FormFeature(context.HttpContext.Request, this.FormOptions)); } } } }