C# 使用.NET 3.5的WebClient.UploadValues将NameValueCollection发布到Web API

C# 使用.NET 3.5的WebClient.UploadValues将NameValueCollection发布到Web API,c#,.net,vb.net,.net-3.5,asp.net-web-api,C#,.net,Vb.net,.net 3.5,Asp.net Web Api,我创建了一个提供PDF文档的Web API。我有一个4.5/4.0客户端,一个只使用Javascript的客户端,我现在正试图为我们现有的一些旧网站创建一个.NET3.5客户端。我知道我可以得到一些图书馆,但根据我的理解。。。HttpClient现在只在4.0中工作 在任何情况下,我都希望使用WebClient作为完成此任务的手段。目前我有: Dim js As New Script.Serialization.JavaScriptSerializer Dim client As New Net

我创建了一个提供PDF文档的Web API。我有一个4.5/4.0客户端,一个只使用Javascript的客户端,我现在正试图为我们现有的一些旧网站创建一个.NET3.5客户端。我知道我可以得到一些图书馆,但根据我的理解。。。HttpClient现在只在4.0中工作

在任何情况下,我都希望使用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,否则我似乎无法通过网络获取值,但是我无法获取适当的响应。

尝试将动作参数修改为
FormDataCollection
,然后看看它是否有效。还有这种检查(将其更改为VB)来捕获任何模型状态错误

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

FormDataCollection在System.Net.Http.Formatting中具有名称空间。我希望不要在.NET3.5中使用它。根据我所做的一些阅读,我可以简单地将HttpClient DLL导入到我的.NET3.5项目中,以利用客户端和HttpResponseMessage。如果我能做到,就没有必要这样做。