简体   繁体   中英

Unable to pass file to web api in ASP.NET MVC Core

I am working on an angular and .NET Core application. I have to pass the file uploaded from angular to WEB API. My code is:

public async Task ImportDataScienceAnalytics(string authToken, IFormFile file)
{
        var baseUrl = Import.GetBaseURL();

        var client = new RestClientExtended(baseUrl + "algorithm/import");
        var request = new RestRequest(Method.POST);


        request.AddHeader("authorization", authToken);
        string jsonBody = JsonConvert.SerializeObject(file);
        request.AddJsonBody(jsonBody);

        var response = await client.ExecutePostTaskAsync(request);
        var result = response.Content;
}

Issue is that i get "No Attachment Found". I think the issue is because of IFormFile. How can i resolve this issue so that i can upload the file to web api.

It seems that you'd like to post uploaded file to an external API from your API action using RestClient , you can refer to the following code snippet.

var client = new RestClient(baseUrl + "algorithm/import");
var request = new RestRequest(Method.POST);

request.AddHeader("authorization", authToken);


using (var ms = new MemoryStream())
{
    file.CopyTo(ms);
    var fileBytes = ms.ToArray();

    request.AddFile("file", fileBytes, file.FileName, "application/octet-stream");
}

//...

Testing code of Import action

public IActionResult Import(IFormFile file)
{
    //...

    //code logic here

You need to make following changes to the code. var baseUrl = Import.GetBaseURL();

        var client = new RestClientExtended(baseUrl + "algorithm/import");
        var request = new RestRequest(Method.POST);

        byte[] data;
        using (var br = new BinaryReader(file.OpenReadStream()))
            data = br.ReadBytes((int)file.OpenReadStream().Length);
        ByteArrayContent bytes = new ByteArrayContent(data);
        MultipartFormDataContent multiContent = new MultipartFormDataContent
    {
        { bytes, "file", file.FileName }
    };
        //request.AddHeader("authorization", authToken);
        //string jsonBody = JsonConvert.SerializeObject(file);
        //request.AddJsonBody(jsonBody);

        /// Pass the multiContent into below post
        var response = await client.ExecutePostTaskAsync(request);
        var result = response.Content;

Do not forget to pass the variable multiContent into the post call.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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