Search code examples
c#asp.net-corecontroller

ASP.NET core - how to pass optional [FromBody] parameter?


How do I pass optional (nullable) [FromBody] parameter in ASP.NET Core (5.0)? If I don't send body in my request I get 415 Unsupported Media Type error. Can this be configured and if so, how to do it on a controller or action, rather than an app level? I presume it has to do something with model validation, but not sure. Thanks.

[HttpGet("[action]")]
public async Task<IActionResult> GetElementsAsync([FromBody] IEnumerable<int> elements = default)
{
  var result = await dataService.GetData(elements);
  return Ok(result);
}

EDIT: To clarify:

This is typical scenario and it works normally: This is typical scenario and it works normally

But passing empty body is returning 415 right away without even reaching action: Passing empty body is returning 415 right away without reaching action


Solution

  • Just add content-type in your request header. Without the content-type:application/json will appear 415 when body is empty.

    No changes to your controller. Test in my side is ok.

    enter image description here

    I created a new asp.net core 5 api project and this is my controller:

    using Microsoft.AspNetCore.Mvc;
    using System.Collections.Generic;
    
    namespace WebApi_net5.Controllers
    {
        public class HomeController : ControllerBase
        {
            [HttpGet("[action]")]
            public string GetElementsAsync([FromBody] IEnumerable<int> elements = default)
            {
                return "value";
            }
        }
    }