2010-09-10 84 views
0

大家好,感谢您的提前。在WCF上为REST服务实施WebInvoke Method =“POST”问题

我有一个问题,试图在WCF下工作一个REST方法。该方法是POST,并且我无法检索从请求发送的值。

这是根据从微软有关WebInvokeAttribute Class个例我如何申报服务:

[OperationContract] 
    [WebInvoke( 
     Method = "POST" , 
     BodyStyle = WebMessageBodyStyle.Bare , 
     UriTemplate = "/sum?x={x}&y={y}" , 
     ResponseFormat = WebMessageFormat.Xml)] 
    ResponseData Sum(string x, string y); 

这是我是如何实现的类此功能:

public ResponseData Sum(string x , string y) 
    { 
     ResponseData retorn = new ResponseData(); 

     int _x = 0; 
     int _y = 0; 

     try 
     { 
      _x = Convert.ToInt32(x); 
      _y = Convert.ToInt32(y); 

      retorn.Data = _x + _y + ""; 
     } 
     catch (Exception ex) 
     { 
      retorn.Data = ""; 
      retorn.Error = true; 
      retorn.MsgError = ex.Message; 
     } 
     return retorn; 
    } 

ResponseData是一类实施DataContract:

[DataContract] 
public class ResponseData 
{ 
    private bool error = false; 
    private string msgError = ""; 

    [DataMember] 
    public string Data { get; set; } 
    [DataMember] 
    public bool Error 
    { 
     get 
     { 
      return error; 
     } 

     set 
     { 
      error = value; 
     } 
    } 
    [DataMember] 
    public string MsgError 
    { 
     get 
     { 
      return msgError; 
     } 

     set 
     { 
      msgError = value; 
     } 
    } 
} 

正如你可以se e,一个很简单的例子。

事情是它不起作用。 THA x和功能y参数总是有一个null值,不要紧,我沿着发送请求,所以返回的消息始终是:

<responsedata xmlns="http://schemas.datacontract.org/2004/07/RestServiceProvaCrypto" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><data>0</data><error>false</error><msgerror></msgerror></responsedata>

所以我的问题是,什么我m我做错了,因为我无法获得请求传递给x和y的值?

我正在使用VS 2008和.Net 3.5。

再次感谢您的时间。

拉蒙·M.盖勒特

+0

你能告诉你如何发送请求? – 2010-09-10 16:14:52

+0

嗨达雷尔,例如,从一个HTML表单的行动是POST,并有两个文本框命名为'x'和'y'。我最近看到使用Fiddler2创建一个类似于.../sum?x = 1&y = 2的url,服务器返回正确的答案,而从Web浏览器发送的相同url返回Invalid Method。此外,我想要的是传递的值不是来自url,而是作为请求的主体,因为它会在post请求中。但以这种方式使用Fiddler2或者发布帖子形式的结果是我在帖子中提到的,x和y为null。谢谢你的时间。 – 2010-09-13 15:17:38

回答

3

我不知道有多少,这将有助于你在这个时候,但据我要调用你的problem.You错误的CRUD概念应尽量使用WebGet属性并保持你的UriTemplate是一样的,因为事实上你正在通过查询字符串传递数据。 我建议..

[OperationContract] 
[WebGet(
    BodyStyle = WebMessageBodyStyle.Bare , 
    UriTemplate = "/sum?x={x}&y={y}" , 
    ResponseFormat = WebMessageFormat.Xml)] 
ResponseData Sum(string x, string y); 

希望这有助于..

问候, Vvn核酸