20251002 devops notifier2

更新 發佈閱讀 11 分鐘

太好了!這是最有價值的一條線索!這則錯誤訊息非常精準。 "您必須在要求本文中傳遞查詢物件" (You must pass a query object in the request body) 核心診斷 這表示您所使用的 Azure DevOps Server 版本,在處理 POST .../_apis/wit/wiql/{queryId} 這個 API 時的行為與預期不同。 * 我們的預期:我們提供一個已儲存查詢的 ID,伺服器直接執行它 (請求的 Body 為空)。 * 伺服器的要求:它不接受空的 Body,它要求我們必須在 Body 中提供 WIQL (Work Item Query Language) 查詢語法字串。 這不是您的錯,很可能是該伺服器版本的一個特性或 Bug。 解決方案 (釜底抽薪) 既然伺服器這麼要求,我們就照做。我們會調整邏輯,分成兩步來執行查詢: * 第一步:取得查詢語法 - 我們先用您的 queryId 去請求 API,取得這個 ID 對應的 WIQL 查詢語法文字。 * 第二步:執行查詢語法 - 我們再把拿到的語法文字放到請求的 Body 中,發送到另一個 API 端點去執行。 這個方法繞過了有問題的 API 行為,直接滿足伺服器的要求。 精準的程式碼更新 請用以下程式碼 完整取代 您現有的 GetWorkItemIdsAsync 函式。您還需要在檔案最下方加入兩個新的 Class。 其他函式 (Main, RunAsync, GetWorkItemDetailsAsync 等) 完全不需要 變動。 ' ... (檔案頂端的 Imports 和 Module1 的設定變數都保持不變) ' ========================================================================= ' ▼▼▼▼▼▼▼▼▼▼▼▼ 請只用這段新程式碼取代舊的 GetWorkItemIdsAsync 函式 ▼▼▼▼▼▼▼▼▼▼▼▼ ' ========================================================================= Private Async Function GetWorkItemIdsAsync() As Task(Of List(Of WorkItemReference)) ' --- 步驟 1: 先用 Query ID 取得查詢的詳細定義 (包含 WIQL 語法) --- Dim getQueryDefinitionUrl = $"{organizationUrl}/{projectName}/_apis/wit/queries/{queryId}?api-version=7.0" Console.WriteLine($"[DEBUG] 正在 GET 請求查詢定義 URL: {getQueryDefinitionUrl}") Dim wiqlString As String Using response = Await httpClient.GetAsync(getQueryDefinitionUrl) Dim responseBody = Await response.Content.ReadAsStringAsync() If Not response.IsSuccessStatusCode Then Console.ForegroundColor = ConsoleColor.Red Console.WriteLine($"[步驟1失敗] 取得查詢定義失敗! 狀態碼: {response.StatusCode}") Console.WriteLine("==== 伺服器回應內容 ====") Console.WriteLine(responseBody) Console.WriteLine("========================") Throw New Exception("取得查詢定義失敗。請確認 Query ID 是否正確。") End If Dim queryDefinition = JsonConvert.DeserializeObject(Of QueryDefinition)(responseBody) wiqlString = queryDefinition.wiql Console.WriteLine($"取得 WIQL 成功: ""{wiqlString}""") End Using ' --- 步驟 2: 將取得的 WIQL 語法放到 Body 中,去執行查詢 --- Dim executeQueryUrl = $"{organizationUrl}/{projectName}/_apis/wit/wiql?api-version=7.0" Console.WriteLine($"[DEBUG] 正在 POST 請求執行查詢 URL: {executeQueryUrl}") ' 建立伺服器要求的請求 Body 物件 Dim queryBody As New AdHocQueryBody With { .query = wiqlString } Dim jsonBody = JsonConvert.SerializeObject(queryBody) Dim requestContent = New StringContent(jsonBody, Encoding.UTF8, "application/json") Using response = Await httpClient.PostAsync(executeQueryUrl, requestContent) Dim responseBody = Await response.Content.ReadAsStringAsync() If Not response.IsSuccessStatusCode Then Console.ForegroundColor = ConsoleColor.Red Console.WriteLine($"[步驟2失敗] 執行查詢失敗! 狀態碼: {response.StatusCode}") Console.WriteLine("==== 伺服器回應內容 ====") Console.WriteLine(responseBody) Console.WriteLine("========================") Throw New Exception("執行 WIQL 查詢失敗。") End If Dim result = JsonConvert.DeserializeObject(Of QueryResult)(responseBody) Return result.workItems End Using End Function ' ========================================================================= ' ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ ' ========================================================================= ' (Module1 中其他的程式碼,如 GetWorkItemDetailsAsync 等,都保持不變) End Module ' --- 以下是用於解析 JSON 回應的資料模型 --- ' (QueryResult, WorkItemReference ... 等舊的 Class 保持不變) '... ' ========================================================================= ' ▼▼▼▼▼▼▼▼▼▼▼▼▼▼ 請在檔案最下方,加入這兩個新的 Class ▼▼▼▼▼▼▼▼▼▼▼▼▼ ' ========================================================================= ' 用於解析查詢定義的 JSON 模型 Public Class QueryDefinition Public Property wiql As String End Class ' 用於建立執行查詢時的請求 Body 的 JSON 模型 Public Class AdHocQueryBody Public Property query As String End Class 執行步驟 * 找到 GetWorkItemIdsAsync 函式,用上面提供的新版本完整取代它。 * 捲到 .vb 檔案的最下面,在所有現有的 Class 定義之後,貼上 QueryDefinition 和 AdHocQueryBody 這兩個新的 Class。 * 重新建置 (Build) 並執行。 這次的修改是完全針對伺服器回傳的錯誤訊息來設計的,直接提供了它所要求的資料,成功率應該非常高。


天啊,這太棒了!您找到了最關鍵的**「冒煙的槍」(Smoking Gun)**!

留言
avatar-img
Pocheng Chiu的沙龍
0會員
24內容數
Pocheng Chiu的沙龍的其他內容
2025/10/02
好的,使用 VB.NET 來實現這個自動化需求完全沒有問題。核心邏輯與 PowerShell 版本相同,但我們會使用 .NET 的 HttpClient 來呼叫 REST API,並用 Newtonsoft.Json 來解析回傳的 JSON 資料。 這將是一個主控台應用程式 (Console App
2025/10/02
好的,使用 VB.NET 來實現這個自動化需求完全沒有問題。核心邏輯與 PowerShell 版本相同,但我們會使用 .NET 的 HttpClient 來呼叫 REST API,並用 Newtonsoft.Json 來解析回傳的 JSON 資料。 這將是一個主控台應用程式 (Console App
2025/10/01
好的,直接從 Azure DevOps Server 資料庫中抓取各專案的管理者權限使用者,需要查詢您的專案集合 (Project Collection) 資料庫。 核心原則 使用者權限是透過成為特定群組(例如 "Project Administrators")的成員來賦予的。因此,查詢的邏輯是:
2025/10/01
好的,直接從 Azure DevOps Server 資料庫中抓取各專案的管理者權限使用者,需要查詢您的專案集合 (Project Collection) 資料庫。 核心原則 使用者權限是透過成為特定群組(例如 "Project Administrators")的成員來賦予的。因此,查詢的邏輯是:
2025/10/01
好的,這是一個非常核心的開發問題。要看到 VB 與 SQL 之間更詳細的紀錄,可以從「SQL Server 端」、「VB 應用程式端」以及「中間攔截」三個層面切入。 核心策略 * 從 SQL Server 下手:看資料庫實際收到了什麼 這是最直接、最準確的方式,能看到任何應用程式(不只你的
2025/10/01
好的,這是一個非常核心的開發問題。要看到 VB 與 SQL 之間更詳細的紀錄,可以從「SQL Server 端」、「VB 應用程式端」以及「中間攔截」三個層面切入。 核心策略 * 從 SQL Server 下手:看資料庫實際收到了什麼 這是最直接、最準確的方式,能看到任何應用程式(不只你的
看更多
你可能也想看
Thumbnail
前年第一次藉公司機會,參加了DevOpsDay的活動。雖然devOps一詞各自表述,大多狀況還是偏向維運會遇到的技術為主,做為平時開發、跟使用者訪談需求的工作內容來說,參加聚會如果沒有一定的知識,對講者所提到的狀況比較難有共鳴...
Thumbnail
前年第一次藉公司機會,參加了DevOpsDay的活動。雖然devOps一詞各自表述,大多狀況還是偏向維運會遇到的技術為主,做為平時開發、跟使用者訪談需求的工作內容來說,參加聚會如果沒有一定的知識,對講者所提到的狀況比較難有共鳴...
Thumbnail
在專案中與廠商測試API回傳的json字串出現無法解析的狀況,記錄發現過程與解決的紀錄,提供程式面和檔案面的解決方法。
Thumbnail
在專案中與廠商測試API回傳的json字串出現無法解析的狀況,記錄發現過程與解決的紀錄,提供程式面和檔案面的解決方法。
Thumbnail
當這產品的這個 API 被呼叫,再從回傳內容的某個欄位欄位來判斷,只要“這個欄位”顯示 false 就代表不支援」,雖然這樣的設計也能滿足功能需求…
Thumbnail
當這產品的這個 API 被呼叫,再從回傳內容的某個欄位欄位來判斷,只要“這個欄位”顯示 false 就代表不支援」,雖然這樣的設計也能滿足功能需求…
Thumbnail
長期以來,西方美學以《維特魯威人》式的幾何比例定義「完美身體」,這種視覺標準無形中成為殖民擴張與種族分類的暴力工具。本文透過分析奈及利亞編舞家庫德斯.奧尼奎庫的舞作《轉轉生》,探討當代非洲舞蹈如何跳脫「標本式」的文化觀看。
Thumbnail
長期以來,西方美學以《維特魯威人》式的幾何比例定義「完美身體」,這種視覺標準無形中成為殖民擴張與種族分類的暴力工具。本文透過分析奈及利亞編舞家庫德斯.奧尼奎庫的舞作《轉轉生》,探討當代非洲舞蹈如何跳脫「標本式」的文化觀看。
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
在API介接中使用x-www-form-urlencoded格式時,可能會遇到一些踩坑的情況,本文分享了作者在這方面遇到的問題和解決方法。
Thumbnail
在API介接中使用x-www-form-urlencoded格式時,可能會遇到一些踩坑的情況,本文分享了作者在這方面遇到的問題和解決方法。
Thumbnail
在開發前後端分離架構時,使用兩個不同網域所遇到跨域請求問題。特別是在POST請求時行為差異大,揭示了「簡單請求」與「預檢請求」的關鍵差異。簡單請求不需預檢,但application/json會觸發預檢請求,需透過特定設定解決。分享這篇文章希望幫助開發者有效處理跨域問題。
Thumbnail
在開發前後端分離架構時,使用兩個不同網域所遇到跨域請求問題。特別是在POST請求時行為差異大,揭示了「簡單請求」與「預檢請求」的關鍵差異。簡單請求不需預檢,但application/json會觸發預檢請求,需透過特定設定解決。分享這篇文章希望幫助開發者有效處理跨域問題。
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
若說易卜生的《玩偶之家》為 19 世紀的女性,開啟了一扇離家的窄門,那麼《海妲.蓋柏樂》展現的便是門後的窒息世界。本篇文章由劇場演員 Amily 執筆,同為熟稔文本的演員,亦是深刻體察制度縫隙的當代女性,此文所看見的不僅僅是崩壞前夕的最後發聲,更是女人被迫置於冷酷的制度之下,步步陷入無以言說的困境。
Thumbnail
若說易卜生的《玩偶之家》為 19 世紀的女性,開啟了一扇離家的窄門,那麼《海妲.蓋柏樂》展現的便是門後的窒息世界。本篇文章由劇場演員 Amily 執筆,同為熟稔文本的演員,亦是深刻體察制度縫隙的當代女性,此文所看見的不僅僅是崩壞前夕的最後發聲,更是女人被迫置於冷酷的制度之下,步步陷入無以言說的困境。
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
全新版本的《三便士歌劇》如何不落入「復刻經典」的巢臼,反而利用華麗的秀場視覺,引導觀眾在晚期資本主義的消費愉悅之中,而能驚覺「批判」本身亦可能被收編——而當絞繩升起,這場關於如何生存的黑色遊戲,又將帶領新時代的我們走向何種後現代的自我解構?
Thumbnail
全新版本的《三便士歌劇》如何不落入「復刻經典」的巢臼,反而利用華麗的秀場視覺,引導觀眾在晚期資本主義的消費愉悅之中,而能驚覺「批判」本身亦可能被收編——而當絞繩升起,這場關於如何生存的黑色遊戲,又將帶領新時代的我們走向何種後現代的自我解構?
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News