У меня есть веб-приложение ASP.NET Core, которое принимает закачки файлов от аутентифицированных пользователей, а также обрабатывает некоторые ошибки, чтобы уведомить меня о возникновении исключения ( Exceptional ).Моя проблема в том, что я периодически получаю оповещения BadHttpRequestException
с из-за того, что пользователи получают доступ к приложению через мобильные устройства в областях с ненадежным покрытием.Я имел обыкновение получать это также с 2.0, но до тех пор, пока описание исключения не было обновлено в 2.1, я никогда не знал, что это было конкретно связано с MinRequestBodyDataRate
, или что это настраиваемо.Я увеличил значения по умолчанию (240 байт за 5 секунд) со следующим
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseKestrel(options =>
{
options.Limits.MinRequestBodyDataRate = new MinDataRate(240.0, TimeSpan.FromSeconds(10.0));
})
.UseStartup<Startup>();
Это удваивает продолжительность ожидания клиента / браузера, но я все еще получаю предупреждения об ошибках.Я не могу контролировать плохой прием пользователей, но я все еще надеюсь попытаться найти способ смягчить ошибки.Я могу продлить минимум еще больше, но я не хочу делать это для всего приложения, если это возможно.В идеале это будет конкретный маршрут / действие, обрабатывающее загрузку.В документации, которую мне удалось найти, указано, что этот минимум можно настроить с помощью IHttpMinRequestBodyDataRateFeature
.Я думал о том, чтобы поместить это в действие, но я не думаю, что действие даже вызывается, пока привязка модели не загрузит весь файл, чтобы связать его с моим параметром.
public async Task<IActionResult> Upload(IFormFile file)
{
var minRequestBodyDataRateFeature = HttpContext.Features.Get<IHttpMinRequestBodyDataRateFeature>();
minRequestBodyDataRateFeature.MinDataRate = new MinDataRate(240, TimeSpan.FromSeconds(30));
myDocumentService.SaveFile(file);
}
Это несколькосмягчается тем фактом, что я ранее реализовал загрузку по частям, и сохраняю файл только в службу / базу данных, когда приходит последний фрагмент (создание файла постепенно во временном местоположении между ними).Но я все еще получаю эти BadHttpRequestException
с даже при увеличенной продолжительности, сделанной через CreateWebHostBuilder
(порция не показана, поскольку это не имеет значения).
Я думаю, что лучшая ставка может быть попытаться иподключите его в методе configure, который устанавливает промежуточное ПО, но я не уверен, что лучше всего применить его только к одному действию.URL может быть?И мне интересно, какие будут последствия, если я полностью отключу минимальную частоту, установив ее на null
.
Я просто пытаюсь сделать подключение более терпимым к соединениям низкого качества, не нарушая при этомслишком много изо дня в день для других аспектов приложения.
- Мне нужен способ применить изменение (потенциально в промежуточном программном обеспечении
Startup.Configure()
) таким образом, чтобы оно относилось только кзатронутый маршрут / URL / действие. - Есть ли какие-либо последствия для рассмотрения, если я отключу его полностью (вместо его увеличения) для этого маршрута / URL / действия?Полное приложение?
- Если что-то из этого не выйдет, безопасно ли просто игнорировать эти ошибки и никогда не регистрировать их?Создавать ли я мертвую зону для вредоносных взаимодействий с приложением / сервером?