使用WebInvoke POST的C#Restful服务

时间:2013-09-20 13:36:26

标签: web-services rest wcf-rest

我正在使用C#开发Restful服务,并在使用

时运行良好
[OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Xml, BodyStyle =     
WebMessageBodyStyle.Wrapped, UriTemplate = "json/?id={id}")]
    string jdata(string id);

我的对应函数实现是:

public string json(string id)
{
 return "You Typed : "+id;
}

到目前为止一切运作良好, 但是当我改变WenInvoke Method =“POST”时,我必须面对“方法不允许”。

[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Xml, BodyStyle = 
WebMessageBodyStyle.Wrapped, UriTemplate = "json/?id={id}")]
    string jdata(string id);

2 个答案:

答案 0 :(得分:4)

你得到“方法不允许”,因为你通过GET而不是POST来到达Uri“json /?id = {id}”。 与您的客户端一起检查(您没有提到如何调用此资源)。请详细说明您如何在客户端中使用Web服务。是.Net客户端吗?

要测试您的API,我建议您使用Fiddler - 在发送http请求之前可以明确指定是使用GET还是POST: enter image description here

另一件事是,您可能无意中将“json”用作Uri,但将ResponseFormat定义为WebMessageFormat.Xml。对客户来说不是有点混乱吗?也许你想回JSON回来?在这种情况下,我建议在请求和响应中使用Json:

[WebInvoke(Method = "POST", UriTemplate = "/ValidateUser", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]

答案 1 :(得分:0)

 [OperationContract]
        [WebInvoke(Method="POST",
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Bare,
             UriTemplate = "json")]
        string jdata(string id);

这是您的合同应该如何,然后在客户端

WebRequest httpWebRequest =
             WebRequest.Create(
               url);
            httpWebRequest.Method = "POST";
string json = "{\"id\":\"1234"\}"

 using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                streamWriter.Write(json);
            }
            httpWebRequest.Timeout = 1000000;

            WebResponse webrespon = (WebResponse)httpWebRequest.GetResponse();

            StreamReader stream = new StreamReader(webrespon.GetResponseStream());
            string result = stream.ReadToEnd();

             Console.Out.WriteLine(result);

以上只是我用来测试我的服务的东西。希望它有所帮助。