Вызов метода формы из нескольких частей программно - PullRequest
0 голосов
/ 31 октября 2019

У меня есть следующий метод в моей WebApi

[HttpPost]
[Route("foo/bar")]
[Consumes("multipart/form-data")]
[DisableRequestSizeLimit]
public async Task<IActionResult> FooBar([FromForm] Data data)

Класс данных выглядит следующим образом

public class Data
{
    public string A { get; set; }
    public string[] B { get; set; }
    public string[] C { get; set; }
    public IFormFile File { get; set; }
}

Я изо всех сил пытаюсь понять, как я могу передать значения в данныхКласс в этот метод с помощью кода C #. Мне нужно передать строку A, два строковых массива B и C и файл File. Я могу легко сделать это через Swagger, но не через код. У меня есть URL-адрес API, так что это не проблема. Единственная проблема - знать, какой код писать здесь.

1 Ответ

2 голосов
/ 01 ноября 2019

Попробуйте использовать HttpClient и отправить MultipartFormDataContent в контроллер

using (var client = new HttpClient())
{
    using (var content = new MultipartFormDataContent())
    {
        content.Add(new StringContent("testA"), "A");//string
        content.Add(new StringContent("testB"), "B");
        content.Add(new StringContent("testBB"), "B");//string[]
        content.Add(new StringContent("testC"), "C");
        content.Add(new StringContent("testCC"), "C");

        //replace with your own file path, below use an image in wwwroot for example
        string filePath = Path.Combine(_hostingEnvironment.WebRootPath + "\\Images", "myImage.PNG");

        byte[] file = System.IO.File.ReadAllBytes(filePath);

        var byteArrayContent = new ByteArrayContent(file);

        content.Add(byteArrayContent, "file", "myfile.PNG");

        var url = "https://locahhost:5001/foo/bar";
        var result = await client.PostAsync(url, content);

    }
}
...