Я изначально задал вопрос о веб-службе WCF, которую я пытался написать, а затем обнаружил, что веб-API ASP.net был более уместен для моих потребностей, из-за некоторой обратной связи здесь.C# Web API REST Service POST
Теперь я нашел хороший учебник, в котором рассказывается, как создать простую службу REST с помощью веб-API, который хорошо работает в значительной степени из коробки.
Мой вопрос
У меня есть метод POST на моем сервере REST службы:
// POST api/values/5
public string Post([FromBody]string value)
{
return "Putting value: " + value;
}
Я POST к этому с помощью ПЛАКАТ, а также мой код # клиент C.
Однако бит, который я не понимаю, является причиной того, что я должен добавить знак «=» к данным POST, чтобы он читал: «= Вот мои данные, которые на самом деле являются строкой JSON»; а не просто отправить: «Вот мои данные, которые на самом деле являются строкой JSON»;
Мой C# клиент, который говорит на службу REST записывается следующим образом:
public string SendPOSTRequest(string sFunction, string sData)
{
string sResponse = string.Empty;
// Create the request string using the data provided
Uri uriRequest = GetFormRequest(m_sWebServiceURL, sFunction, string.Empty);
// Data to post
string sPostData = "=" + sData;
// The Http Request obj
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uriRequest);
request.Method = m_VERB_POST;
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
Byte[] byteArray = encoding.GetBytes(sPostData);
request.ContentLength = byteArray.Length;
request.ContentType = m_APPLICATION_FORM_URLENCODED;
try
{
using (Stream dataStream = request.GetRequestStream())
{
dataStream.Write(byteArray, 0, byteArray.Length);
}
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
sResponse = reader.ReadToEnd();
}
}
}
catch (WebException ex)
{
//Log exception
}
return sResponse;
}
private static Uri GetFormRequest(string sURL, string sFunction, string sParam)
{
StringBuilder sbRequest = new StringBuilder();
sbRequest.Append(sURL);
if ((!sURL.EndsWith("/") &&
(!string.IsNullOrEmpty(sFunction))))
{
sbRequest.Append("/");
}
sbRequest.Append(sFunction);
if ((!sFunction.EndsWith("/") &&
(!string.IsNullOrEmpty(sParam))))
{
sbRequest.Append("/");
}
sbRequest.Append(sParam);
return new Uri(sbRequest.ToString());
}
Кто-нибудь может объяснить, почему я должен предварять знак «=», как в приведенном выше коде (string sPostData = "=" + sData;
)?
Большое спасибо заранее!
Вы не используете что-то вроде restsharp для этого? http://restsharp.org/ –
@ KosalaW http://i.imgur.com/ybWKjSM.png: D – DSF
Привет, Косала W, спасибо за это. Честно говоря, я не смотрел на это, но, может быть, и должен был. Моя задача - написать код клиента, который взаимодействует с кодом сервера, который в конечном итоге будет написан третьей стороной. Мне просто нужно предоставить тестовый жгут и руководство API. Имея это в виду, у вас есть обратная связь по вышеуказанному, поскольку добавление знака '=' к данным POST кажется неправильным, но если у меня есть, то я буду Я просто хотел бы понять немного больше? Спасибо, – Yos