2010-09-10 79 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核酸