2013-05-21 29 views
1

我創建了提供PDF文檔的Web API。我有一個4.5/4.0客戶端,一個僅支持Javascript的客戶端,我現在正在嘗試爲我們擁有的一些較舊的網站創建一個.NET 3.5客戶端。我明白,我可以NUGET一些圖書館,但從我的理解... HttpClient現在只能在4.0中工作?使用WebClient.UploadValues for .NET 3.5將NameValueCollection發佈到Web API

在任何情況下,我都想使用WebClient作爲實現此目的的一種手段。目前,我有:

Dim js As New Script.Serialization.JavaScriptSerializer 
Dim client As New Net.WebClient 
client.Headers(Net.HttpRequestHeader.ContentType) = "application/x-www-form-urlencoded" 
Dim serializedData As String = js.Serialize(Me.PDFReport) 
Dim collection As New NameValueCollection 
collection.Add("value", serializedData) 
Dim response As Byte() = client.UploadValues("http://www.mywebsite.com/api/report/Post/", collection) 

我順手把我的串行數據轉換成的NameValueCollection,這樣我可以用它的PDF返回一個字節數組。我似乎無法讓它顯示在Web API端:

Public Function Post(str As NameValueCollection) As Byte() 
    Dim js As New JavaScriptSerializer 
    Dim obj As PDFReport = js.Deserialize(Of PDFReport)(str("value")) 
    Dim rpt As New ReportService(obj) 
    'Return Nothing (Commented for now until I figure out how to get values) 
End Function 

我在做什麼錯?除非我使用UploadString,否則我似乎無法獲得線上的值,但是我無法獲取合適的響應。

回答

2

你能分享你的原始請求的樣子嗎?

此外,請嘗試修改您的動作參數爲FormDataCollection並查看它是否有效。還有這種檢查(將其更改爲VB)以捕獲任何模型狀態錯誤。

if (!ModelState.IsValid) 
{ 
    throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState)); 
} 
+0

FormDataCollection在System.Net.Http.Formatting中是命名空間。我希望不要在.NET 3.5中使用它。從我已完成的一些閱讀中,我可以簡單地將HttpClient DLL導入到我的.NET 3.5項目中,以便利用客戶端和HttpResponseMessage。如果我能做到這一點,就沒有必要這樣做。 – jlrolin

+0

這爲我解決了同樣的問題。 – lloydphillips

相關問題