0

我正在用 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);
4

2 回答 2

4

您得到“不允许的方法”,因为您通过 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)]
于 2014-12-04T10:40:13.787 回答
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);

以上只是我用来测试我的服务的东西。希望能帮助到你。

于 2013-10-20T20:49:22.743 回答