Meetup.com API создает событие с данными JSON
Я пытаюсь создать событие на Meetup из проекта C#. Я пытаюсь использовать этот метод API.
Я перепробовал несколько вещей, теперь я сократил его до максимально простого. Моя проблема в том, что когда я отправляю запрос, я получаю Bad Request обратно с сообщением об ошибке "name is required". Что мне не хватает?
Вот соответствующий бит:
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();
}
}
}
РЕДАКТИРОВАТЬ: Я попытался добавить "&name= что-то" к адресу, как предложено, и это работает... Однако проблема еще не решена. Событие создано, но остальная часть данных (которые я отправляю как json) почему-то все еще не проходит.
1 ответ
Кажется, StreamWriter не добавляет никаких данных в ваш запрос POST, попробуйте что-то вроде этого:
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();
}
}
}