我正在尝试使用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使用多部分表单数据?
答案 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文件来处理这个问题