.NET WebMethod с загрузкой файла xhrHttpRequest

Я пытаюсь выполнить асинхронную загрузку файлов с помощью JavaScript в сочетании с WebMethod в VB.NET.

JavaScript:

xhr.open('POST', "upload.aspx/upload", true);
xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");

var formData = new FormData();

// append the files
for (var i in files) {
   formData.append(base.el.name, files[i]);
}

xhr.send(formData);

ВБ.NET:

<Web.Services.WebMethod(enableSession:=True)> _
Public Shared Function upload() As String
    Return "Hello World!"
End Function

Если я использую content-type=application/x-www-form-urlencoded или multipart/form-data, WebMethod не срабатывает, если я использую content-type=application/json, WebMethod срабатывает, но ответ представляет собой 500 с сообщением: Недопустимый примитив JSON: ------WebKitFormBoundary ...

Есть ли способ заставить AJAX WebMethod работать с данными составной формы?


person benedict_w    schedule 08.10.2014    source источник


Ответы (1)


Кажется, .NET не допустит multipart/form-data для типа содержимого:

Перехват JSON и Как ASP.NET AJAX 1.0 предотвращает эти атаки1

Существует встроенный уровень защиты проверки, который ASP.NET применяет для веб-методов ASP.NET AJAX на основе GET и POST, который заключается в том, что независимо от используемого HTTP-глагола ASP.NET всегда требует, чтобы HTTP Заголовок Content-Type имеет значение application/json. Если этот заголовок типа контента не отправлен, ASP.NET AJAX отклонит запрос на сервере.

Кажется, лучший способ - справиться с этим, используя вместо этого общий файл .ashx.

person benedict_w    schedule 09.10.2014