В моем приложении net framework 4.8 есть маршрут, по которому оно получает данные формы из внешнего интерфейса. Все работает нормально, за исключением случаев, когда требуется обработать большое количество файлов.
Проблема в том, что приложение использует Google Recaptcha V3, и секретный ключ для Google Recaptcha генерируется на внешнем интерфейсе, а затем отправляется на серверную часть в том же режиме. тело запроса, как и все файлы. Когда сеть работает медленно, к тому времени, когда MultipartFormDataStreamProvider будет завершена и у меня будет доступ к токену рекапчи из внешнего интерфейса для выполнения внутренней проверки рекапчи, пройдет уже более двух минут, и срок действия ключа внешнего интерфейса истечет, что приводит к неудачному запросу.
Как мне сначала каким-то образом извлечь значение рекапчи из тела запроса, а затем приступить к обработке файлов только после первой проверки проверки Google Recaptcha и прохождения проверка валидации в серверной части
Сейчас все будет равно нулю, пока не будет завершено ожидание Request.Content.ReadAsMultipartAsync(provider);, но к тому времени он будет завершен, когда появятся большие файлы, срок действия RacpatchaKey истечет.
[HttpPost]
[Route("post/files")]
public async Task Post()
{
var provider = new MultipartFormDataStreamProvider(//somePath);
await Request.Content.ReadAsMultipartAsync(provider);
try
{
MyModel model = BuildMyModel();
/*************************************************/
// When there is slow network and large files, by the
// time it gets here after processing all the files,
// the RecaptchKey will have expired and validation will fail
/*************************************************/
if (!GoogleReCAPTCHA.Validate(model.RecaptchaKey))
{
// return error message
}
// ... process rest of data
}
...
}
private MyModel BuildMyModel()
{
MyModel model = new MyModel();
model.FirstName = HttpContext.Current.Request.Params.Get("FirstName");
model.RecaptchaKey = HttpContext.Current.Request.Params.Get("RecaptchaKey ");
...
return model;
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... ng-files-g