【问题标题】:Webservice expecting JSON, sending multipart-form data期望 JSON 的 Web 服务,发送多部分形式的数据
【发布时间】:2023-04-01 08:04:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c# javascript ajax web-services


    【解决方案1】:

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

    【讨论】:

    • asp.net web api 很不错,第一个.net 框架我真的很喜欢在里面开发服务
    • ServiceStack 也是如此。与 ASP.NET Web API 相比,我更喜欢它。
    • 我听说了,我预计今晚会有一个有趣的研究项目
    【解决方案2】:

    由于 web 服务需要 JSON,因此在方法的声明中只需说明它接收 STREAM 类型的对象。

    这应该可行:

      [OperationContract]
        SuccessUpload uploadDoc2(Stream data);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 2013-03-22
      • 1970-01-01
      • 1970-01-01
      • 2013-11-17
      相关资源
      最近更新 更多