繁体   English   中英

使用.NET 3.5的WebClient.UploadValues将NameValueCollection张贴到Web API

[英]POST NameValueCollection to Web API using WebClient.UploadValues for .NET 3.5

我创建了一个Web API,用于提供PDF文档。 我有一个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,否则似乎无法通过导线获取值,但是那样我将无法获取适当的响应。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM