欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-14 14:01:28
一、简介 在asp.net core mvc中,文件上传的最大上传文件默认为20mb,如果我们想上传一些比较大的文件,就不知道怎么去设置了,没有了web.config我们...

一、简介

在asp.net core mvc中,文件上传的最大上传文件默认为20mb,如果我们想上传一些比较大的文件,就不知道怎么去设置了,没有了web.config我们应该如何下手呢?

二、设置上传文件大小

1.应用程序级别设置

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

public void configureservices(iservicecollection services)
{
  servicesconfigure<formoptions>(options =>
  {
    optionsmultipartbodylengthlimit = 60000000;
  });
}

2.action级别设置

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

 [attributeusage(attributetargetsclass | attributetargetsmethod, 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 = contexthttpcontextfeatures;
      var formfeature = featuresget<iformfeature>();

      if (formfeature == null || formfeatureform == null)
      {
        // request form has not been read yet, so set the limits
        featuresset<iformfeature>(new formfeature(contexthttpcontextrequest, _formoptions));
      }
    }
  }

因为asp.net core mvc中,与之前版本不同的是具体功能被封装在了各种feature(特征)中,httpcontext上下文只是能各个特征进行管理的容器。这个filter中就只将action拦截,对httpcontext中的formfeature(负责表单提交功能)重新进行设置,从而达到限制具体action上传文件大小的目的。

三、结语

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。