2012-11-21 64 views
0

我有一個問題,試圖使用休息夏普進行POST。我試圖調用一個不完全符合現代標準的Web服務,並且我需要能夠在我的文章正文中發佈請求XML。使用休息夏普休息呼叫正文發佈XML夏普

如果我只是在RestRequest對象上執行request.AddBody(xmlObject),則將一個名爲text/xml的參數添加到請求中。在這種情況下,我收到來自服務器的錯誤響應,說「拋出異常:內容在prolog中不被允許」。這告訴我服務器正在嘗試處理參數(text/xml =)的值以及值。

當我在RAW body字段中使用所需xml請求的chrome中的REST控制檯時,一切都按預期工作。

關於如何使用Rest Sharp工作的任何想法?

編輯:看起來我需要使用request.AddFile(「name」,bytes_to_add,「file_name」)。但是,當我嘗試這樣做時,出現異常(「System.InvalidOperationException:此屬性在寫入啓動後無法設置」),看起來像帶有RestSharp的issue,該問題從未解決。我可能只需要使用HttpWebRequest庫進行請求。

+0

你可以發佈序列化請求的樣子嗎?最簡單的方法是用Fiddler捕捉它。該例外通常意味着在請求中打開標記之前有一些數據。 –

+0

我通過使用HttpWebRequest並直接寫入請求流來得到它的工作。我仍在使用其餘Sharp Sharp序列化程序,所以我知道該對象已正確序列化。但我不是直接使用HttpWebRequest的粉絲。所以我克隆了剩餘的夏普代碼,看看我能否弄清楚如何解決拋出的異常。 –

+0

我認爲這是http://stackoverflow.com/questions/5095692/how-to-add-text-to-request-body-in-restsharp –

回答

1

你可能會過度想象它。 RestSharp.AddBody將一個對象作爲參數,並根據RequestFormat屬性使用JSON或XML序列化器自動將其序列化爲正確的格式。

直接添加XML沒有任何意義。 REST的一部分神奇之處在於它支持多種格式,而不僅僅是XML。 RestSharp是爲此而編寫的,所以它的所有公共接口都只使用POCO。

簡單的解決方案就是不序列化對象。您不想添加xmlObject,只需將實際的C#對象傳遞給AddBody方法並讓它處理序列化。

+0

的副本我應該更清楚地命名傳遞給AddBody的對象。我不是自己序列化對象,我應該叫它requestModel或類似的東西。其餘的夏普序列化工作很好,但服務器響應與我的帖子中提到的錯誤。 –

+0

當我想調試什麼時候出現故障並且BizTalk是客戶端時直接發佈xml是非常有意義的。 –

+0

@ThomasEyde我不認爲直接發佈XML是解決您的問題的正確方法。您可以使用自定義序列化程序來查看或控制正在發生的事情,或使用Fiddler或Wireshark等功能查看它。這是一個關注點(和糟糕的OO設計)的混合,擔心在嘗試發送請求的相同應用程序代碼中使用XML序列化。 –