1

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;
    }

1 Answer 1

3

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

Sign up to request clarification or add additional context in comments.

1 Comment

i was just about to say that. It is OK to accept your own answer.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.