Получите одно значение из MultipartFormDataStreamProvider перед обработкой файлов (google recaptcha)C#

Место общения программистов C#
Ответить
Anonymous
 Получите одно значение из MultipartFormDataStreamProvider перед обработкой файлов (google recaptcha)

Сообщение Anonymous »

В моем приложении 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»