• 解决ASP.NET Core Mvc文件上传限制问题


    一、简介

      在ASP.NET Core MVC中,文件上传的最大上传文件默认为20MB,如果我们想上传一些比较大的文件,就不知道怎么去设置了,没有了Web.Config我们应该如何下手呢?

    二、设置上传文件大小

      1.应用程序级别设置

        我们需要在 ConfigureServices方法中添加如下代码,设置文件上传的大小限制为60 MB。

    1. public void ConfigureServices(IServiceCollection services)
    2. {
    3. services.Configure<FormOptions>(options =>
    4. {
    5. options.MultipartBodyLengthLimit = 60000000;
    6. });
    7. }

      2.Action级别设置

        除了上面对全局进行设置外,我们也可以通过自定义Filter的方式,对单个Action进行控制,Filter代码如下:

    1. [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
    2. public class RequestFormSizeLimitAttribute : Attribute, IAuthorizationFilter, IOrderedFilter
    3. {
    4. private readonly FormOptions _formOptions;
    5. public RequestFormSizeLimitAttribute(int valueCountLimit)
    6. {
    7. _formOptions = new FormOptions()
    8. {
    9. ValueCountLimit = valueCountLimit
    10. };
    11. }
    12. public int Order { get; set; }
    13. public void OnAuthorization(AuthorizationFilterContext context)
    14. {
    15. var features = context.HttpContext.Features;
    16. var formFeature = features.Get<IFormFeature>();
    17. if (formFeature == null || formFeature.Form == null)
    18. {
    19. // Request form has not been read yet, so set the limits
    20. features.Set<IFormFeature>(new FormFeature(context.HttpContext.Request, _formOptions));
    21. }
    22. }
    23. }

       因为ASP.NET Core MVC中,与之前版本不同的是具体功能被封装在了各种Feature(特征)中,HttpContext上下文只是能各个特征进行管理的容器。这个Filter中就只将Action拦截,对HttpContext中的FormFeature(负责表单提交功能)重新进行设置,从而达到限制具体Action上传文件大小的目的。

    三、结语

       本来感觉像是发现了一个文件上传的BUG,已经确认在1.0.1版本中已经进行了修复。在1.0.0版本中,如果Action没有设置一个IFromFile作为参数,那么Request.From.Files将不能访问并且报出异常。

  • 相关阅读:
    Java学习9
    Windows环境下实现WireShark抓取HTTPS
    WireShark新手使用教程
    charles使用教程
    charles
    知道做到
    Appium 自动化测试改造思路
    今日总结
    今日总结
    今日总结
  • 原文地址:https://www.cnblogs.com/huilixieqi/p/6496889.html
Copyright © 2020-2023  润新知