2017-09-20 44 views
1

每當我嘗試通過REST調用附加TFS WorkItem時,附件大小爲0KB。TFS附件大小0KB通過REST調用

首先我使用下面的代碼上傳附件存儲中的附件。

https://{instance}/DefaultCollection/_apis/wit/attachments?api-version=1.0&filename="{fileName}" 

我通過休息調用發送字節數組中的數據。在此之後,我附上工作性質的附件。

有附加附件附件的成功,但大小爲零KB 是與TFS我做錯了的問題還是什麼?

我使用的編程C#語言和REST夏普訪問VSTS的API

Dim restClient = New RestClient("Server URL") 

    restClient.Authenticator = New HttpBasicAuthenticator("UserId", "Password") 

    Dim request = New RestRequest("API_Name", Method.POST) 

    request.AlwaysMultipartFormData = False 

    request.AddParameter(String.Format("{0}; charset=utf-8", contentType), File.ReadAllBytes(filePath), ParameterType.RequestBody) 

    request.RequestFormat = DataFormat.Json 

    Dim response As IRestResponse = restClient.Execute(request) 

    Return response 

我以字節爲單位的文件數據傳送。

使用WorkItem附加附件。

Dim restClient = New RestClient(ACCESS_URL) 
    restClient.Authenticator = New HttpBasicAuthenticator(USER_NAME, PASSWORD) 
    Dim request = New 
    RestRequest("CollectionName}/_apis/wit/workitems/{WorkItem_ID}", Method.PATCH) 

    request.AddParameter("application/json-patch+json; charset=utf-8", 
    "post_Data", ParameterType.RequestBody) 

    request.RequestFormat = DataFormat.Json 

    Dim response As IRestResponse = restClient.Execute(request) 
    Return response 

Post_Data是採取這種類型的數據

[{ 
    "op": "add", 
    "path": "/relations/-", 
    "value": { 
     "rel": "AttachedFile", 
     "url": "AttachementURI", 

    }] 
+0

有什麼 「的contentType」 您在使用你的代碼?我用「application/octet-stream」內容類型測試了你的代碼,它工作正常。附件大小是正確的,它可以成功打開。 –

+0

是我使用應用程序/八位字節流,但我的附件大小始終是0K,您是否使用我已發佈的相同的代碼或您做出一些更改? –

+0

是的,幾乎相同。我在答案中添加了我的代碼供您參考。 –

回答

0

你錯過了在Post_Data 「屬性」 部分,嘗試用下面:

[{ 
    "op": "add", 
    "path": "/relations/-", 
    "value": { 
    "rel": "AttachedFile", 
    "url": "AttachementURI", 
    "attributes": { 
     } 
}] 
+0

是否有任何改變,這是我已經發布的相同。這裏有什麼? –

+0

不,我注意到你實際上使用VB而不是C#,所以我創建了一個VB項目來測試代碼。它仍然有效。你的TFS服務器的版本是什麼?上傳後如何將附件添加到工作項目中?您正嘗試上傳的文件類型是什麼? –

+0

TFS服務器版本是2017update2,它也適用於VSTS。我正在編輯我的問題,顯示附加工作項的代碼。 –

1

的保持{ file-contents }時爲空,我可以重現這個問題的JSON字符串。

因此,請確保您已指定{ file-contents }

要將文件附加到工作項,upload the attachment到 附件庫,然後將其附加到工作項。詳情請參閱Add an attachment

上傳附件:

POST https://{instance}/DefaultCollection/_apis/wit/attachments?api-version={version}&filename=Spec.txt 
Content-Type: application/octet-stream 
{ file-contents } 

添加附件的具體工作項目:

PATCH https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workitems/299?api-version=1.0 
Content-Type: application/json-patch+json 
[ 
    { 
    "op": "test", 
    "path": "/rev", 
    "value": 3 
    }, 
    { 
    "op": "add", 
    "path": "/fields/System.History", 
    "value": "Adding the necessary spec" 
    }, 
    { 
    "op": "add", 
    "path": "/relations/-", 
    "value": { 
     "rel": "AttachedFile", 
     "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/attachments/098a279a-60b9-40a8-868b-b7fd00c0a439?fileName=Spec.txt", 
     "attributes": { 
     "comment": "Spec for the work" 
     } 
    } 
    } 
] 

見下面C#示例上傳並添加附件對於工作項目:

enter image description here

+0

感謝Andy的回覆,我正在使用休息清晰的post方法上傳數據,在這種情況下它顯示文件附件爲零kb。 –

+0

@NitinParashar這是什麼意思「使用休息尖端後的方法」?您是否使用上述答案中提到的REST API(上傳附件:)上傳文件?哪裏顯示文件附件的零kb?您可以請分享詳細步驟來重現問題,如有必要捕獲屏幕截圖。 –

+0

安迪我正在使用C#語言和REST夏普後附加方法我編輯我的上述問題請參考澄清 –

相關問題