Web服务期望JSON,发送多部分表单数据

时间:2013-02-05 21:53:12

标签: c# javascript ajax web-services

我正在尝试以异步方式上传文件。我目前正在使用jquery.form插件并使用ajaxSubmit方法。后端包括获取此上载文档并将其插入文档库。该部分没有问题。现在,当我尝试上传时,出现404错误请求错误。 Web服务期望来自请求的JSON。我注意到情况并非如此,因为在请求有效负载中,我得到类似以下内容。

    Content-Disposition: form-data; name="file"; filename="Json45r11 (1).zip"

Whic不是JSON,所以我认为这就是我收到错误请求的原因。 后端方法的Web服务定义是这样的:

              [OperationContract]
              [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest , ResponseFormat = WebMessageFormat.Json)]
              SuccessUpload uploadDoc(string id);

前端提交看起来像这样:

      $('#form').ajaxSubmit({url: 'backend Method', type: 'post',data: JSON.stringify({id:1})});

这是否有解决方法?任何帮助表示赞赏,抱歉,如果英语不好而不是母语。

2 个答案:

答案 0 :(得分:3)

jQuery.form插件在上传经典ASMX Web服务无法理解的文件时使用multipart/form-data编码请求。您可以使用通用ASHX处理程序(IHttpHandler)替换您的Web服务,这将允许您处理任何请求格式。或者甚至更好,如果你不想像处理程序一样低级,你可以使用一些新的框架,如ASP.NET MVC,ASP.NET WEB API,WCF,ServiceStack ......这些都很乐意处理multipart/form-data编码请求。

答案 1 :(得分:2)

由于webservice需要一个JSON,在你的方法声明中只是说它接收了一个STREAM类型的对象。

这应该有效:

  [OperationContract]
    SuccessUpload uploadDoc2(Stream data);