簡體   English   中英

從VB.Net WPF應用程序調用REST Api

[英]Call REST Api from VB.Net WPF application

我有用Java編寫的示例代碼,解釋了如何調用REST Api的方法:

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.apac he.commons.io.FileUtils;
import org.glassfish.jersey.media.multipart.FormDataMultiPart;
import org.glassfish.jersey.media.multipart.MultiPartFeature;
import org.glassfish.jersey.media.multipart.file.FileDataBodyPart;

public class Test {

 public static void main(String[] args) {
  String alias = "ABCD";
  String pin = "012345";
  String originFileName = "C:\file.pdf";
  String destinationFilename = "C:\file2.pdf";
  String urlService = "https://serviceUrl";

  Client client = ClientBuilder.newBuilder().register(MultiPartFeature.class).build();
  FormDataMultiPart form = new FormDataMultiPart();
  form.field("pin", pin);
  form.bodyPart(new FileDataBodyPart("content", new File(originFileName)));

  Response response = client.target(urlService).path("/auto/action/name/" + alias).request(MediaType.MULTIPART_FORM_DATA).post(Entity.entity(form, form.getMediaType()));
  if (response.getStatus() == 200) {
   InputStream file = response.readEntity(InputStream.class);
   File targetFile = new File(destinationFilename);
   try {
    FileUtils.copyInputStreamToFile(file, targetFile);
    System.out.print("Success");
   } catch (IOException e) {
    e.printStackTrace();
    System.out.print("Error");
   }
  } else {
   System.out.print("Error:" + response.readEntity(String.class));
  }
 }
}

在我的應用程序中,我將其轉換為如下形式:

Dim userAlias As String = "ABCD"
Dim pin As HttpContent = New StringContent("012345")
Dim content As HttpContent = New StreamContent(File.OpenRead(originFileName))

Using client = New HttpClient()
    client.BaseAddress = New Uri(urlService)
    Using formData = New MultipartFormDataContent()
        formData.Add(pinCode, "pin", "pin")
        formData.Add(content, "test", "test")

        Dim response = client.PostAsync("/auto/sign/pades/" + userAlias, formData).Result
        If response.StatusCode = 200 Then
            Return response.Content.ReadAsStreamAsync().Result
        Else
            MessageBox.Show(response.ReasonPhrase)
            Return Nothing
        End If
    End Using
End Using

結果,我收到500內部服務器錯誤。 我檢查了服務網址,它是正確的,所以我猜我在MultipartFormDataContent創建中做錯了什么。

我發現錯誤是由我上傳的參數名稱中的錯字引起的。 我創建MultipartFormDataContent的方式實際上是正確的。 感謝@Chillzy的建議,使我重寫了查找錯字的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM