ASP. NET Core 3.1 | Модель аргумента всегда нулевая с большими данными формы в методе действия контроллера - PullRequest
0 голосов
/ 18 апреля 2020

Поскольку я разрабатываю веб-приложение на ASP. NET Core 3.1, и я передаю большие данные формы, используя ajax, в мой контроллер, и он всегда равен нулю.

Если я уменьшу объем данных, то он работает нормально, но при больших объемах данных он всегда равен нулю.

Ниже уже опробованы ссылки

Увеличьте размер загружаемого файла в Asp. Net core

Новый максимальный размер тела запроса 30 МБ (~ 28,6 МБ) по умолчанию

Это мой 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);
}

Заранее спасибо

1 Ответ

0 голосов
/ 22 апреля 2020

Сконфигурировать ограничения запросов в 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>
...