首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WebInvoke POST的C# Restful服务

使用WebInvoke POST的C# Restful服务
EN

Stack Overflow用户
提问于 2013-09-20 21:36:26
回答 2查看 23.7K关注 0票数 0

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

代码语言:javascript
复制
[OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Xml, BodyStyle =     
WebMessageBodyStyle.Wrapped, UriTemplate = "json/?id={id}")]
    string jdata(string id);

我的相应函数实现是:

代码语言:javascript
复制
public string json(string id)
{
 return "You Typed : "+id;
}

到目前为止,一切都运行得很好,但是当我更改WenInvoke Method="POST“时,我不得不面对一个”不允许的方法“。

代码语言:javascript
复制
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Xml, BodyStyle = 
WebMessageBodyStyle.Wrapped, UriTemplate = "json/?id={id}")]
    string jdata(string id);
EN

回答 2

Stack Overflow用户

发布于 2014-12-04 18:40:14

你得到“方法不允许”,因为你通过get而不是POST访问Uri "json/?id={id}“。与您的客户检查这一点(您没有提到如何调用此资源)。请给出一些进一步的细节,您是如何尝试在客户端使用您的web服务。.Net是客户端吗?

为了测试你的API,我推荐使用Fiddler -当你可以在发送http请求之前显式地指定是使用GET还是POST:

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

代码语言:javascript
复制
[WebInvoke(Method = "POST", UriTemplate = "/ValidateUser", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
票数 4
EN

Stack Overflow用户

发布于 2013-10-21 04:49:23

代码语言:javascript
复制
 [OperationContract]
        [WebInvoke(Method="POST",
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Bare,
             UriTemplate = "json")]
        string jdata(string id);

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

代码语言:javascript
复制
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);

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18918199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档