使用WebClient.UploadValues for .NET 3.5将NameValueCollection POST到Web API

时间:2013-05-21 20:46:45

标签: c# .net vb.net .net-3.5 asp.net-web-api

我创建了一个提供PDF文档的Web API。我有一个4.5 / 4.0客户端,一个仅限Javascript的客户端,我现在正在尝试为我们拥有的一些旧网站创建一个.NET 3.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的Byte数组。我似乎无法让它出现在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,否则我似乎无法通过线路获取值,但是我无法获取适当的响应。

1 个答案:

答案 0 :(得分:2)

尝试将您的操作参数修改为FormDataCollection并查看其是否有效。并且还有这种检查(将其更改为VB)以捕获任何模型状态错误。

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