当我在ASP.NET Core 3.1中开发一个web应用程序时,我正在使用ajax将大型表单数据传递到我的控制器中,但它始终为null。
如果我减少数据量,那么它工作得很好,但对于大量数据,它总是空的。
以下链接已尝试
增加Asp.Net核心中的上传文件大小
新的默认30 MB(~28.6MiB(最大请求正文大小限制
这是我的Ajax调用
publicObject.PostRequest = function (url, data, onSuccess, onError, _withoutLoader) {
$.ajax({
url: _url,
type: "POST",
headers: {
'RequestVerificationToken': $('input:hidden[name="__RequestVerificationToken"]').val()
},
cache: false,
data: _data,
success: function (_data) {
//CFD.Loader.hide();
_onSuccess(_data);
},
error: function (result, textStatus, _xhr) {
CFD.Loader.hide();
if (_result.status == 401) {
CFD.User.GetLoginModal('loginsection');
}
_onError(_result);
}
});
};
这是我的控制器操作方法:
[HttpPost]
[RequestFormLimits(MultipartBodyLengthLimit = int.MaxValue)]
[RequestSizeLimit( int.MaxValue)]
public async Task<IActionResult> GetProducts(VMProductFilter model)
{
List<VMProduct> resultModel = null;
try
{
resultModel = await GetAllProducts(model);
}
catch (Exception ex)
{
ex.Log();
}
return PartialView("_ProductGrid", resultModel);
}
提前感谢
在Startup.cs.中配置请求限制
public void ConfigureServices(IServiceCollection services)
{
//...
services.Configure<FormOptions>(x =>
{
//x.ValueLengthLimit = Settings.ValueLenLimit;
x.MultipartBodyLengthLimit = Settings.MulBodyLenLimit;
//x.MemoryBufferThreshold = Settings.MemoryBufferThreshold;
});
//...
}
如果使用IIS,还需要在web.config中配置:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741822" /><!-- 1GB-->
</requestFiltering>
</security>
</system.webServer>
您应该在StartUp类中设置FormOptions:
public void ConfigureServices(IServiceCollection services)
{
// Set limits for form options, to accept big data
services.Configure<FormOptions>(x =>
{
x.BufferBody = false;
x.KeyLengthLimit = 2048; // 2 KiB
x.ValueLengthLimit = 4194304; // 32 MiB
x.ValueCountLimit = 2048;// 1024
x.MultipartHeadersCountLimit = 32; // 16
x.MultipartHeadersLengthLimit = 32768; // 16384
x.MultipartBoundaryLengthLimit = 256; // 128
x.MultipartBodyLengthLimit = 134217728; // 128 MiB
});
...
} // End of the ConfigureServices method