解決ASP.NET Core Mvc文件上傳限制問題實(shí)例
2016-12-06 17:42:35
14070
解決ASP.NET Core Mvc文件上傳限制問題實(shí)例
本篇文章主要介紹了解決ASP.NET Core Mvc文件上傳限制問題,具有一定的參考價(jià)值,有需要的可以了解一下。
一、簡介
在ASP.NET Core MVC中,文件上傳的最大上傳文件默認(rèn)為20MB,如果我們想上傳一些比較大的文件,就不知道怎么去設(shè)置了,沒有了Web.Config我們應(yīng)該如何下手呢?
二、設(shè)置上傳文件大小
1.應(yīng)用程序級(jí)別設(shè)置
我們需要在 ConfigureServices方法中添加如下代碼,設(shè)置文件上傳的大小限制為60 MB。
1 2 3 4 5 6 7 | public void ConfigureServices(IServiceCollection services)
{
servicesConfigure<FormOptions>(options =>
{
optionsMultipartBodyLengthLimit = 60000000;
});
}
|
2.Action級(jí)別設(shè)置
除了上面對(duì)全局進(jìn)行設(shè)置外,我們也可以通過自定義Filter的方式,對(duì)單個(gè)Action進(jìn)行控制,F(xiàn)ilter代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | [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 )
{
featuresSet<IFormFeature>( new FormFeature(contextHttpContextRequest, _formOptions));
}
}
}
|
因?yàn)锳SP.NET Core MVC中,與之前版本不同的是具體功能被封裝在了各種Feature(特征)中,HttpContext上下文只是能各個(gè)特征進(jìn)行管理的容器。這個(gè)Filter中就只將Action攔截,對(duì)HttpContext中的FormFeature(負(fù)責(zé)表單提交功能)重新進(jìn)行設(shè)置,從而達(dá)到限制具體Action上傳文件大小的目的。
三、結(jié)語
本來感覺像是發(fā)現(xiàn)了一個(gè)文件上傳的BUG,已經(jīng)確認(rèn)在1.0.1版本中已經(jīng)進(jìn)行了修復(fù)。在1.0.0版本中,如果Action沒有設(shè)置一個(gè)IFromFile作為參數(shù),那么Request.From.Files將不能訪問并且報(bào)出異常。