Web services 使用WebInvoke POST的C#Restful服务

Web services 使用WebInvoke POST的C#Restful服务,web-services,rest,wcf-rest,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 js

我正在用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”时,我必须面对一个“不允许的方法”

这是你的合同应该是什么样子,然后在客户

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);
以上只是我用来测试我的服务的东西。希望能有帮助

这是你的合同应该是什么样子,然后在客户

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);
以上只是我用来测试我的服务的东西。希望有帮助。

您会得到“不允许使用方法”,因为您是通过get而不是POST到达Uri“json/?id={id}”。 请与您的客户核实这一点(您没有提到如何称呼此资源)。请提供更多详细信息,说明您如何在客户端中使用web服务。是.Net客户端吗

要测试您的API,我建议使用Fiddler-当您可以在发送http请求之前显式指定是使用GET还是POST时:

另一件事是,您可能无意中使用了“json”作为Uri,但将ResponseFormat定义为WebMessageFormat.Xml。客户不觉得有点困惑吗?也许你想把JSON还给我?在这种情况下,我建议在请求和响应中都使用Json:

[WebInvoke(Method = "POST", UriTemplate = "/ValidateUser", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
您得到“不允许使用方法”,因为您是通过get而不是POST到达Uri“json/?id={id}”。 请与您的客户核实这一点(您没有提到如何称呼此资源)。请提供更多详细信息,说明您如何在客户端中使用web服务。是.Net客户端吗

要测试您的API,我建议使用Fiddler-当您可以在发送http请求之前显式指定是使用GET还是POST时:

另一件事是,您可能无意中使用了“json”作为Uri,但将ResponseFormat定义为WebMessageFormat.Xml。客户不觉得有点困惑吗?也许你想把JSON还给我?在这种情况下,我建议在请求和响应中都使用Json:

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

您是否确实向服务发送POST请求?或者您正在尝试使用“网络浏览器中只有一个URL”来访问它?(WebBrowser URL=GET,网页表单=POST)。Get只需要一个URL帖子需要一个URL+body为什么不直接使用MVC4Web呢API@marvinSmit,请告诉我如何在WEBINVOKE中使用Post方法。感谢WebInvoke属性将您的web服务定义为“Post”。客户端需要确保它使用的是POST而不是GET(即,浏览基于POST的RestFull服务将产生一个不允许的方法)。如果要使用浏览器进行测试,则必须创建一个“表单”,表单字段是参数,表单的操作设置为web服务操作终结点。是否确实向服务发送POST请求?或者您正在尝试使用“网络浏览器中只有一个URL”来访问它?(WebBrowser URL=GET,网页表单=POST)。Get只需要一个URL帖子需要一个URL+body为什么不直接使用MVC4Web呢API@marvinSmit,请告诉我如何在WEBINVOKE中使用Post方法。感谢WebInvoke属性将您的web服务定义为“Post”。客户端需要确保它使用的是POST而不是GET(即,浏览基于POST的RestFull服务将产生一个不允许的方法)。如果要使用浏览器进行测试,则必须创建一个“表单”,表单字段是参数,表单的操作设置为web服务操作端点。