1

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:我有一个通用处理程序,它从 ajax POST 调用传递 json 数据和上传文件接收数据。喜欢:

//        type: 'POST',
//        url: '/myHandler.ashx', 
//        data: '{"key":"val"}'

处理程序:在通用处理程序上,我想获取 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 还包含文件流,那么 extcat json 数据的最佳方法是什么?

我使用 POST 方法的原因,除了是标准的,是我也在使用 流式传输上传的文件System.Web.HttpFileCollection,但这工作正常。

4

1 回答 1

1

将您的 Ajax 代码更改为:

//        type: 'POST',
//        url: '/myHandler.ashx', 
//        data: JSON.stringify({"key":"val"}),
//        dataType: "json" ,
//        contentType: "application/json"
于 2017-05-09T10:21:52.277 回答