使用xhrHttpRequest文件上载的.NET WebMethod

时间:2014-10-08 17:17:55

标签: ajax vb.net webmethod form-data

我正在尝试使用JavaScript与VB.NET中的WebMethod结合进行异步文件上传

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);

VB.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使用多部分表单数据?

1 个答案:

答案 0 :(得分:2)

似乎.NET不允许 multipart / form-data 用于内容类型:

JSON Hijacking and How ASP.NET AJAX 1.0 Avoids these Attacks 1

  

ASP.NET有一个内置的保护验证层   强制执行基于GET和POST的ASP.NET AJAX Web方法   是的,无论使用什么HTTP动词, ASP.NET总是如此   要求将HTTP Content-Type标头设置为该值   应用/ JSON 即可。它不会发送此内容类型标头,ASP.NET   AJAX将拒绝服务器上的请求。

似乎最好的办法是使用通用的.ashx文件来处理这个问题