Abhijeet
Abhijeet

Reputation: 13866

How to read FormData into Web API?

I seek your help for a Web API extension which could support model binding from Form Data say, FormDataAttribute (hypothetical), or guidance from community on how to achieve it.

public class NammaApiController : ApiController
{
    public IHttpActionResult PostFDFromBody([FromBody]FD reqBody)
    {

        return Ok();
    }

    public IHttpActionResult PostFDFromFormData([FromFormData]FD reqBody)
    {

        return Ok();
    }
}

Default Web API model binder works only for raw input, unfortunately.

enter image description here

Upvotes: 1

Views: 6372

Answers (1)

Ben Croughs
Ben Croughs

Reputation: 2653

I recently did a sort a like scenario, on your controller, use this method signature in your controller class

 [HttpPost]
 [Route("search")]
 public IHttpActionResult Search(System.Net.Http.Formatting.FormDataCollection search)

Then create an extension method on the FormDataCollection class to convert this FormDataCollection to a NameValueCollection, easier later.

public static NameValueCollection Convert(this FormDataCollection formDataCollection)
{
    IEnumerator<KeyValuePair<string, string>> pairs = formDataCollection.GetEnumerator();

    NameValueCollection collection = new NameValueCollection();

    while (pairs.MoveNext())
    {
        KeyValuePair<string, string> pair = pairs.Current;
        collection.Add(pair.Key, pair.Value);
    }

    return collection;
}

Then you have a NameValueCollection, and then in a class, create a constructor like:

public SearchQuery(NameValueCollection formdata) : base(formdata)
{
    FirstName = formdata["FirstName"];    
    ...
}

Upvotes: 1

Related Questions