首页 > 解决方案 > 如何将 DTO 传递给 vb.net 中的 Rest API?

问题描述

我在一个需要 DTO 对象的应用程序(用 c# 编写)中有一个 API 方法

        public IActionResult SaveProviderToOmitFromDto(RadiologyBillingProvidersToOmitDto dto)
        {
            mProvidersToOmitService.SaveFromDto(dto);
            return Ok();
        }

我需要在较旧的 vb.net 应用程序中传递 DTO 对象。到目前为止,我有一个 sub 来传递 URL 和 DTO:

        Public Shared Sub SaveProviderToOmit(ProviderToOmit As ProvidersToOmitDto)
            Dim Url = String.Format("{0}RadiologyBilling/SaveProviderToOmitFromDto", Settings.GetApiUrlStart)
            API.SaveProviderToOmitFromDto(Url, PatchMethod, ProviderToOmit)
        End Sub

以及另一种“修补” DTO 的方法

    Public Shared Sub SaveProviderToOmitFromDto(Url As String, Method As String, ProviderToOmit As ProvidersToOmitDto)
        Dim Provider = JsonConvert.SerializeObject(ProviderToOmit)
        Dim Request = GetRequest(Url, Method, Provider.Length)
        Request.GetResponse().Close()
    End Sub

    Private Shared Function GetRequest(Url As String, Method As String, ContentLength As Integer) As WebRequest
        Dim Request = WebRequest.Create(Url)
        Request.Method = Method
        Request.ContentLength = ContentLength
        Request.ContentType = "application/json"
        Return Request
    End Function

如何将 DTO 对象传递给 API?我预计需要序列化对象,但如何在请求中传递对象?

标签: c#jsonvb.netapi

解决方案


我在 Stack Overflow 上找不到任何可以接受的答案的问题,但是这个没有接受答案的线程解决了 OPs 问题:

如何使用 VB.NET 将 JSON 发布到特定的 url?

Private Function SendRequest(uri As Uri, jsonDataBytes As Byte(), contentType
As String, method As String) As String
Dim response As String
Dim request As WebRequest

request = WebRequest.Create(uri)
request.ContentLength = jsonDataBytes.Length
request.ContentType = contentType
request.Method = method

Using requestStream = request.GetRequestStream
requestStream.Write(jsonDataBytes, 0, jsonDataBytes.Length)
requestStream.Close()

Using responseStream = request.GetResponse.GetResponseStream
Using reader As New StreamReader(responseStream)
response = reader.ReadToEnd()
End Using
End Using
End Using

Return response
End Function

使用此功能

Dim data = Encoding.UTF8.GetBytes(jsonSring)
Dim result_post = SendRequest(uri, data, "application/json", "POST")

推荐阅读