0

バッチ作成メソッドでワークアイテムを作成しようとすると、以下のエラーが発生します

エラー 1

"Message":"No MediaTypeFormatter is available to read an object of type 'JsonBatchHttpRequest' from content with media type 'application/json-patch+json'."

エラー 2

{"count":1,"value":{"Message":"One or more errors occurred."}}

Microsoft のこのドキュメントhttps://www.visualstudio.com/en-us/docs/integrate/api/wit/batchを参照しました。およびstackoverflawに関する私の質問Javascript REST APIを使用してTFSで大量の作業項目を作成する

以下の方法でデータを送信しようとしました

  • "json:x"
  • 「本体:×:」
  • "body:JSON.stringify(x)"
  • "json:[本体:x]"

Content-Types として「application/json-patch+json」と「application/json」(Microsoft のドキュメントとして推奨)の両方を試しました。

Post (Microsoft のドキュメントとして推奨) と Patch の両方の方法にうんざりしています。

このエラーに利用できる参照はありません。したがって、私はこの時点でうんざりしています.何が間違っている可能性がありますか..

public batchOperation(  ):q.Promise<boolean>{   

        let deferred = q.defer<boolean>();

        try {            
            var batchCreateUrl = this.collectionURL+"/_apis/wit/$batch?api-version=1.0";

   var x= {
        method:"PATCH",
        uri:"/VSTS_TFS_Test/_apis/wit/workItems/$Bug?api-version=1.0",
        headers:{
                "Content-Type":"application/json-patch+json"
            },
    body:[
            {   "op":"add", 
                "path": "/fields/System.Tags", 
                "value":"tg;tg1;tg2" 
            },
            { 
                "op": "add", 
                "path": "/fields/System.Title", 
                "value": "Some Title Text "
            },
            { 
                "op": "add", 
                "path": "/fields/System.Description", 
                "value":"this is description"
            }
        ]
 }

            var options = {            
                url: batchCreateUrl,
                username: this.username,
                password: this.password,
                domain: this.domain,
                method: 'PATCH',
                headers: {
                'Content-Type': 'application/json-patch+json'
            },

                body: x
            };

            httpntlm.patch(options, function(err,res) {

                if(err) {
                    return deferred.reject(false);}
                else{
                    console.log("Patch Complete");
                    console.log(res.body);
                    deferred.resolve(true);
                }
            });
        } catch (error) {
            console.log("Failed to Perform Batch Operation ")
            deferred.reject(false);
        }
        return deferred.promise;
    }
4

1 に答える 1

1

説明されているMicrosoft ドキュメントのチュートリアルと"application/json"同じように、Content-Types とpostメソッドとして使用する必要があります 。

httpntlmを使用しているため、次のオプションを含めることができます。

  1. json: json を直接送信する場合 (content-type を application/json に設定)
  2. files: アップロードするファイルのオブジェクト (content-type は multipart/form-data に設定され、boundary=xxx)
  3. body: 送信するカスタム本文コンテンツ。使用すると、以前のオプションは無視され、カスタム ボディが送信されます。(コンテンツタイプは設定されません)

ソースリンク

body を使用している場合、以前のオプションは無視され (content-type は失われます)、問題が発生する可能性があります。json を直接使用してみてください。

于 2017-03-21T09:02:08.997 に答える