0

ファイルを非同期的にアップロードしようとしています。現在、jquery.form プラグインを使用し、ajaxSubmit メソッドを使用しています。バックエンドは、このアップロードされたドキュメントを取得し、ドキュメント ライブラリに挿入することで構成されます。その部分では問題ありません。アップロードしようとすると、404 Bad Request エラーが発生します。Web サービスは、リクエストからの JSON を想定しています。リクエストのペイロードで次のようなものが得られるため、そうではないことに気付きました。

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

これは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})});

このすべての回避策はありますか?英語が母国語でない場合は申し訳ありません。

4

2 に答える 2

3

jQuery.form プラグインはmultipart/form-data、従来の ASMX Web サービスが理解できないファイルをアップロードするときに、エンコードされた要求を使用します。Web サービスを汎用の ASHX ハンドラ ( IHttpHandler) に置き換えることで、あらゆるリクエスト形式を処理できるようになります。または、ハンドラーほど低レベルになりたくない場合は、ASP.NET MVC、ASP.NET WEB API、WCF、ServiceStack などの新しいフレームワークを使用できます。これらはすべて問題なく処理されます。multipart/form-dataエンコードされたリクエスト。

于 2013-02-05T21:57:02.077 に答える
2

Web サービスは JSON を想定しているため、メソッドの宣言では、STREAM 型のオブジェクトを受け取ることだけを記述します。

これはうまくいくはずです:

  [OperationContract]
    SuccessUpload uploadDoc2(Stream data);
于 2013-02-05T22:07:16.093 に答える