Ошибка HTTP 413.1 — объект запроса слишком велик Выдать ошибку, а не увеличить размер

Поэтому я получаю сообщение об ошибке HTTP Error 413.1 — Request Entity Too Large, потому что я пытаюсь загрузить очень большой файл. Когда я получаю эту ошибку, весь сайт падает, чтобы отобразить эту страницу ошибки. В каждом сообщении SO или в Интернете, посвященном этой проблеме, ответ заключается в том, чтобы просто увеличить размер разрешенных файлов в конфигурации IIS.

Я хочу сохранить размер по умолчанию и просто выдать пользователю сообщение об ошибке, сообщая ему, что его файл слишком велик, без сбоя сайта и отображения страницы ошибки HTTP 413.1. Возможно ли это сделать? Я думал о проверке ошибок в моей модели представления, но это не сработало.

public class uploadVM: IValidatableObject
{
    public IFormFile upload { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        var size = upload.Length;
        if (size > 5242880)
        {
            yield return new ValidationResult("File upload too large");
        }
    }
}

person Forrest    schedule 06.01.2021    source источник


Ответы (1)


Я думаю, это связано с тем, что основное приложение asp.net размещено в IIS, что заставит IIS сначала проверить загруженный файл. Если он слишком велик, IIS напрямую сообщит об ошибке. Решение, о котором я подумал, заключается в том, что вы можете использовать JS для оценки размера загруженного файла, и если файл слишком велик, не передавать его приложению в IIS.

 <script type="text/javascript">
var files = document.getElementById('fileId').files;  
var fileSize = 0;
if(files.length!=0){
    fileSize = files[0].size;
}
if(fileSize >1048576){
    alert("The uploaded file is too large!");
    return false;
}
 </script>
person Ding Peng    schedule 07.01.2021
comment
Значит, вы не верите, что на стороне сервера можно что-то написать, чтобы заблокировать слишком большой файл? - person Forrest; 07.01.2021
comment
Да, поскольку запрос будет сначала обработан IIS, а затем в основном приложении Asp.net, я не думаю, что это сработает, если запрос будет обработан в ядре Asp.net. - person Ding Peng; 08.01.2021