HTML
<form id="ajaxForm" action="/uploadHandler.ashx" method="post">
<label for="Name">File name</label><input type="text" id="Name" />
<label for="someData">Email</label><input type="text" id="Email" />
<label for="file">Image</label><input name="uploadFile" id="fileName" />
</form>
AJAX:我有一个通用处理程序,它通过传递json-data和upload-file的ajax POST调用接收数据。像:
// type: 'POST',
// url: '/myHandler.ashx',
// data: '{"key":"val"}'
HANDLER:在通用处理程序上,我想获取post json数据并流式传输上传的文件。这就是我通常获得POST json-data的方式:
var jsSerializer = new JavaScriptSerializer();
var jsonString = String.Empty;
context.Request.InputStream.Position = 0;
using (var inputStream = new StreamReader(context.Request.InputStream))
{
jsonString = inputStream.ReadToEnd();
}
var uploader = jsSerializer.Deserialize<Uploader>(jsonString);
// the Uploader class looks like this
public class Uploader{
public string Name { get; set; }
public string Email { get; set; }
}
此处的问题是context.Request.InputStream
还包含上传的文件并导致jsSerializer.Deserialize
方法失败
如果POST还包含文件strem,那么extcat json数据的最佳方法是什么?
除了标准之外,我使用POST方法的原因是我也使用System.Web.HttpFileCollection
流式传输上传的文件,但这样做很好。
答案 0 :(得分:1)
将您的Ajax代码更改为:
// type: 'POST',
// url: '/myHandler.ashx',
// data: JSON.stringify({"key":"val"}),
// dataType: "json" ,
// contentType: "application/json"