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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.