在ASP.NET Core MVC中,文件上传的最大上传文件默认为20MB,若是咱们想上传一些比较大的文件,就不知道怎么去设置了,没有了Web.Config咱们应该如何下手呢?git
咱们须要在 ConfigureServices方法中添加以下代码,设置文件上传的大小限制为60 MB。github
public void ConfigureServices(IServiceCollection services) { services.Configure<FormOptions>(options => { options.MultipartBodyLengthLimit = 60000000; }); }
除了上面对全局进行设置外,咱们也能够经过自定义Filter的方式,对单个Action进行控制,Filter代码以下:学习
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] public class RequestFormSizeLimitAttribute : Attribute, IAuthorizationFilter, IOrderedFilter { private readonly FormOptions _formOptions; public RequestFormSizeLimitAttribute(int valueCountLimit) { _formOptions = new FormOptions() { ValueCountLimit = valueCountLimit }; } public int Order { get; set; } public void OnAuthorization(AuthorizationFilterContext context) { var features = context.HttpContext.Features; var formFeature = features.Get<IFormFeature>(); if (formFeature == null || formFeature.Form == null) { // Request form has not been read yet, so set the limits features.Set<IFormFeature>(new FormFeature(context.HttpContext.Request, _formOptions)); } } }
由于ASP.NET Core MVC中,与以前版本不一样的是具体功能被封装在了各类Feature(特征)中,HttpContext上下文只是能各个特征进行管理的容器。这个Filter中就只将Action拦截,对HttpContext中的FormFeature(负责表单提交功能)从新进行设置,从而达到限制具体Action上传文件大小的目的。spa
原本感受像是发现了一个文件上传的BUG,已经确认在1.0.1版本中已经进行了修复。在1.0.0版本中,若是Action没有设置一个IFromFile做为参数,那么Request.From.Files将不能访问而且报出异常。
code
GitHub:https://github.com/maxzhang1985/YOYOFx 若是觉还能够请Star下, 欢迎一块儿交流。orm
.NET Core 开源学习群: 214741894 blog