Неверный запрос HTTP400 при попытке загрузить файл с помощью сообщения AJAX на контроллер .NET - PullRequest
0 голосов
/ 25 апреля 2018

Я получаю эту ошибку при попытке загрузить любой файл, не являющийся TXT-файлом.Текстовые файлы работают правильно.Я предполагаю, что этой проблемы не было год назад, поскольку этот код прошел несколько этапов тестирования, и было бы легко обнаружить, что все файлы, кроме .txt, не могут быть загружены.Код сервера VB.net:

ajax:

            var uFile = new FormData();
            var files = $(careerInformationSession.dg).find("#CareerSessionModel_Document_UploadFile").get(0).files;
            if (files.length > 0) {
                uFile.append("UploadedImage", files[0]);
                var ajaxRequest = $.ajax({
                    type: "POST",
                    url: careerInformationSession.api + "UploadFile",
                    contentType: false,
                    processData: false,
                    data: uFile,
                    success: function (data) {
                        careerInformationSession.uploadSuccess(data);
                    },
                    error: function (ts) {
                        careerInformationSession.callFailure();
                    }
                });

сервер:

    <System.Web.Http.HttpPost> 
    Public Function UploadFile() As String
        Dim returnValue As String = String.Empty
        If HttpContext.Current.Request.Files.AllKeys.Any() Then
            ' Get the uploaded image from the Files collection
            Dim httpPostedFile As System.Web.HttpPostedFile = HttpContext.Current.Request.Files("UploadedImage")
            If httpPostedFile IsNot Nothing Then
                Dim validateFile As New ValidateAjaxPostedFile(5120, "JPG,PNG,PDF,JPEG,GIF", httpPostedFile)
                If validateFile.Validate() Then
                    SessionManager.SetSessionData(CWDS.Framework.Utilities.SessionManager.SubSystem.EM, CAREER_INFO_SESSION_FILE, validateFile.FileData)
                    SessionManager.SetSessionData(CWDS.Framework.Utilities.SessionManager.SubSystem.EM, CAREER_INFO_SESSION_FILE_NAME, System.IO.Path.GetFileName(httpPostedFile.FileName))
                Else
                    Return returnValue
                End If
            End If
        End If
        Return returnValue
    End Function

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 26 апреля 2018

Мы выяснили проблему, но можем иметь только временное решение.Мы вызываем InvokeIsValidRequestString, чтобы предотвратить вставку сценариев в вызовы API.Эта функция .net помечала любой нетекстовый файл как вредоносный по неизвестной причине.

Исходный код:

Return (New CustomRequestValidation) .InvokeIsValidRequestString (HttpContext.Current, (New System.IO.StreamReader (HttpContext.Current.Request.InputStream)). ReadToEnd (). Replace (",", ","), RequestValidationSource.Form, ничего, -1)

Новый код:

Если HttpContext.Current.Request.Files.Count> 0, тогда верните истинное обратное возвращение (новое CustomRequestValidation) .InvokeIsValidRequestString (HttpContext.Current, (новый System.IO.StreamReader (HttpContext.Current.Request)) ReadOnt..Replace (",", ","), RequestValidationSource.Form, Nothing, -1) End If

Наш новый код работает, поскольку у нас еще есть антивирусный сканер, который запускается после этих начальных шагов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...