0

I am trying to create an event on Meetup from a C# project. I am trying to use this API method.

I have tried a number of things, now I have stripped it down to as simple as I could. My problem is, that when I send off the request I get Bad Request back with the error message of "name is required". What am I missing?

Here's the relevant bit:

var address = await GetAddressAsync(apiPath); 
// address is like: http://api.meetup.com/{groupID}/events?sign=true&key={API key}

var request = WebRequest.Create(address);
request.Method = "POST";
request.ContentType = "application/json";

var json = "{name: \"Tenshiko's Test Event\"}"; //JsonConvert.SerializeObject(requestObject);
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
    streamWriter.Write(json);
}

try
{
    WebResponse response = await request.GetResponseAsync();

    var dataStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(dataStream);
    string responseString = reader.ReadToEnd();

    var model = JsonConvert.DeserializeObject<TResponse>(responseString);

    reader.Close();
    dataStream.Close();
    response.Close();

    return model;
}
catch (WebException e)
{
    using (WebResponse response = e.Response)
    {
        HttpWebResponse httpResponse = (HttpWebResponse)response;

        using (Stream data = response.GetResponseStream())
        using (var reader = new StreamReader(data))
        {
            string text = reader.ReadToEnd();
        }
    }
}

EDIT: I tried adding "&name=something" to the address as suggested, and it works... However, the problem is not solved yet. The event is created, but rest of the data (which I am sending as json) is somehow still not getting through.

Tenshiko
  • 1,450
  • 3
  • 17
  • 33
  • The documentation lists "name" as a required parameter, but you don't have it anywhere in your querystring. It should be something like: `http://api.meetup.com/{groupID}/events?name={name}&sign=true&key={API key}` – Negorath Apr 15 '16 at 19:50
  • Yes, but the documentation also says, that it supports json format. Also, I find it hard to believe that this data should be sent in the query parameter, especially because the "description" field could be 50k characters long. – Tenshiko Apr 16 '16 at 06:34

1 Answers1

0

Seems the StreamWriter isn't adding any data to your POST request, try something like this instead:

var address = await GetAddressAsync(apiPath); 
// address is like: http://api.meetup.com/{groupID}/events?sign=true&key={API key}

var json = "{name: \"Tenshiko's Test Event\"}"; 
var encoding = new ASCIIEncoding ();
var byte1 = encoding.GetBytes(json);

var request = WebRequest.Create(address);
request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = byte1.Length;

using (var reqstream = new request.GetRequestStream())
{
    reqstream.Write(byte1, 0, byte1.Length);
}

try
{
    WebResponse response = await request.GetResponseAsync();

    var dataStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(dataStream);
    string responseString = reader.ReadToEnd();

    var model = JsonConvert.DeserializeObject<TResponse>(responseString);

    reader.Close();
    dataStream.Close();
    response.Close();

    return model;
}
catch (WebException e)
{
    using (WebResponse response = e.Response)
    {
        HttpWebResponse httpResponse = (HttpWebResponse)response;

        using (Stream data = response.GetResponseStream())
        using (var reader = new StreamReader(data))
        {
            string text = reader.ReadToEnd();
        }
    }
}
Negorath
  • 486
  • 2
  • 5