'C# REST API File Upload from Client Code gets 400 Bad Request

I have a Rest API written in .Net core that accepts a File as input as Multipart/Form-data. The API works absolutely fine when I run it from Swagger/Postman.

Here is the API endpoint.

  [HttpPost("CreateStudy")]
  public ActionResult CreateStudy([FromForm] APIRequest request)
  {
     // rest of the code

Also here is the APIRequest object. it has only one property which is IFormFile Type.

public class APIRequest
{             
    public IFormFile XMLFile { get; set; }
}  

So far it works well. The problem is that I am trying to write a client side code that will call this API and pass the File from C# code.

But I am always getting a 400-Bad request in the client code.

This is the client code I am trying with.

    public string CallServiceWithFileAsync(string EndPointURL, string FilePath)
    {
            string ResultStatusCode;            
        
            Uri uri = new Uri(EndPointURL);

            var Client = new HttpClient();
            Client.DefaultRequestHeaders.Clear();

            //Prepare Message
            HttpRequestMessage Message = new HttpRequestMessage();
            Message.Method = HttpMethod.Post;

            Message.Headers.Add("Accept", "application/octet-stream");
            Message.RequestUri = new Uri(EndPointURL);               

            using (Stream fileStream = File.OpenRead(FilePath))
            {
                var content = new StreamContent(fileStream);
                var response = Client.PostAsync(uri, content);
                ResultStatusCode = response.Result.StatusCode.ToString();
            }

            return ResultStatusCode;
    }

What am I doing wrong here? What is the correct way of sending a file into REST endpoint ?



Solution 1:[1]

[FromForm] expects an accept header with application/x-www-url-formencoded. If this is not the case, check your output-logs to see why the request is not processed.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 klekmek