Yairt
Yairt

Reputation: 167

ASP.NET Web API send JSON array

I am using ASP.NET Web API and I want to send a list of objects as a JSON array but keep receiving "The remote server returned an error: (400) Bad Request."

When I send a single object it works fine.

Here's my code:

"Server" Side Code:

public class Trigger
{
    public string TriggerID { get; set; }[Required]
    public string TriggerName { get; set; }[Required]
    public string TriggerDescription { get; set; }
}

public class TriggersController : Controller
{
    [HttpPost]
    public HttpResponseMessage AddTriggers(IQueryable<Trigger> TriggerEvent)
    {
        if (SetUserDetails())
        {
            if (ModelState.IsValid)
            {
                return _repository.AddTriggers(TriggerEvent);
            }
            else
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
            }
        }
        else
        {
            throw new HttpResponseException(new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized) { Content = new StringContent("Incorrect token") });
        }
    }

}

"Client" side Code:

string JSON = [{"TriggerID":"1","TriggerName":"My 1 Event","TriggerDescription":"This is my 1 event"},{"TriggerID":"2","TriggerName":"My 2 Event","TriggerDescription":"This is my 2 event"}]

    public string AddTrigger(string URL, string JSON)
    {
        string ret = string.Empty;

        StreamWriter requestWriter;

        var webRequest = System.Net.WebRequest.Create(URL) as HttpWebRequest;
        if (webRequest != null)
        {

            webRequest.Headers.Add("Authorization-Token", AuthenticationCode);
            webRequest.Method = "POST";
            webRequest.ContentType = "application/json";

            //POST the data.
            using (requestWriter = new StreamWriter(webRequest.GetRequestStream()))
            {
                requestWriter.Write(JSON);
            }
        }

        HttpWebResponse resp = (HttpWebResponse)webRequest.GetResponse();
        Stream resStream = resp.GetResponseStream();
        StreamReader reader = new StreamReader(resStream);
        ret = reader.ReadToEnd();

        return ret;
    }

Upvotes: 1

Views: 2047

Answers (1)

Yairt
Yairt

Reputation: 167

OK, found my mistake, should use IEnumerable instead of IQueryable and everything works fine.

Upvotes: 3

Related Questions