Допустим, что я указал следующую REST-службу WCF по адресу "http://localhost/MyRESTService/MyRESTService.svc"
[ServiceContract]
public interface IMyRESTService
{
[OperationContract]
[WebInvoke(
Method = "POST",
UriTemplate = "/receive")]
string Receive(string text);
. Теперь я могу вызвать свою службу REST в Fiddler по адресу" http://localhost/MyRESTService/MyRESTService.svc/receive" иэто работает (я получу возвращаемое значение).
Но что, если я хочу отправить параметры в мою службу REST?Должен ли я изменить определение моего интерфейса, чтобы оно выглядело так:
[ServiceContract]
public interface IMyRESTService
{
[OperationContract]
[WebInvoke(
Method = "POST",
UriTemplate = "/receive/{text}")]
string Receive(string text);
Теперь, если я вызову службу REST в Fiddler, используя адрес "http://localhost/MyRESTService/MyRESTService.svc/receive/mytext", он работает (отправляет параметр" mytext ""и я получу возвращаемое значение). Так это правильный URI для отправки параметров через POST?
Что меня смущает, так это то, что я не знаю, как именно использовать этот URI в кодев то же время, когда я отправляю параметры . У меня есть следующий код, который почти завершен для отправки POST-данных в службу REST WCF, но я не могу понять, как учитывать параметры с помощью URI.
Dictionary<string, string> postDataDictionary = new Dictionary<string, string>();
postDataDictionary.Add("text", "mytext");
string postData = "";
foreach (KeyValuePair<string, string> kvp in postDataDictionary)
{
postData += string.Format("{0}={1}&", HttpUtility.UrlEncode(kvp.Key), HttpUtility.UrlEncode(kvp.Value));
}
postData = postData.Remove(postData.Length - 1);
Uri uri = new Uri("http://localhost/MyRESTService/MyRESTService.svc/receive");
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
req.Method = "POST";
byte[] postArray = Encoding.UTF8.GetBytes(postData);
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = postArray.Length;
Stream dataStream = req.GetRequestStream();
dataStream.Write(postArray, 0, postArray.Length);
dataStream.Close();
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
string responseString = reader.ReadToEnd();
reader.Close();
responseStream.Close();
response.Close();
Если я захочу отправить параметры (например, "mytext") в коде через POST, если код URI будет
,
Uri uri = new Uri("http://localhost/MyRESTService/MyRESTService.svc/receive");
или этим (это работает, но это не имеет никакого смысла, так как параметры должны быть добавлены другим способом, а не напрямую к адресу URI)
Uri uri = new Uri("http://localhost/MyRESTService/MyRESTService.svc/receive/mytext");
Я рад, что вы можете мне помочь, это не может быть таксложно с WCF REST Services.