1

我创建了一个提供 PDF 文档的 Web API。我有一个 4.5/4.0 客户端,一个纯 Javascript 客户端,我现在正尝试为我们拥有的一些旧网站创建一个 .NET 3.5 客户端。我知道我可以 NUGET 一些库,但据我了解...... 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,否则我似乎无法通过线路获取值,但是我无法获取适当的响应。

4

1 回答 1

2

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

if (!ModelState.IsValid)
{
  throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState));
}
于 2013-05-21T22:17:55.930 回答