Net.Http.StringContent日期格式

时间:2019-03-31 14:24:11

标签: vb.net json.net

我正在尝试将带有一些元数据的文件上传到Web API。在开发人员环境中一切都很好。但是当在Azure中托管相同的API时,出现以下日期解析错误:

  

从字符串“ 31/03/2019 11:33:52”到“日期”类型的转换无效。

我想StringContent应该以ISO 8601格式写日期,而事实并非如此。

接下来是我的程序的简化:

Public Async Function UploadDocFile(oHttpClient as HttpClient, url as string, ByVal oByteArray as Byte(), exs As List(Of Exception)) As Task(Of Boolean)
    Dim retval As Boolean
    Dim formContent = New Net.Http.MultipartFormDataContent From {
        {New Net.Http.StringContent("DateCreated"), now},
        {New Net.Http.StreamContent(New IO.MemoryStream(oDocfile.Stream)), "pdf", "pdf.jpg"}
    }

    Dim response = Await oHttpClient.PostAsync(url, formContent)
    If response.StatusCode = 200 Then
        retval = True
    Else
        exs.Add(New Exception(response.ReasonPhrase))
    End If
    Return retval
End Function

1 个答案:

答案 0 :(得分:1)

您正在使用Collection InitializerMultipartFormDataContent添加项目;您应该遵循Add方法的this overload,该方法分别接受类型为HttpContentString的两个参数。

因此,括号({})中的第二个值应该是数据内容的名称,而不是其 value 。另一方面,传递给StringContent constructor的参数应该是 value (内容),而不是 name 。您基本上已将它们换出。如果您将Option Strict设置为On (这是you should do,顺便说一句),那么您将遇到编译器错误,并且很容易发现了错误。

您的代码应如下所示:

Dim formContent = New Net.Http.MultipartFormDataContent From
{
    {New Net.Http.StringContent(Now.ToString("SomeFormat")), "DateCreated"},
    ' More values.
}

..其中SomeFormat是您所使用的Web API支持的格式。