2011-10-24 39 views
0

比方說,我們有REST客戶端下一個聲明:WebGet和對象作爲WCF REST客戶端GET參數

[ServiceContract] 
interface ITestClient 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "SetData/?d1={d1}&d2={d2}")] 
    void SetData(string d1, string d2); 
} 

我想塗時用下一個簽名(HTTP GET)使用它:

[ServiceContract] 
interface ITestClient 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "SetData/?")] 
    void SetData(SetDataRequest setData); 
} 

[DataContract] 
public class SetDataRequest 
{ 
    [DataMember(Name = "d1")] 
    private string Data1 { get; set; } 

    [DataMember(Name = "d2")] 
    private string Data2 { get; set; } 
} 

我希望WCF將SetDataRequest的實例序列化爲HTTP QueryString。 這是可能的(HTTP POST是不可接受的)?

回答

0

你不應該使用WebGet爲此,你應該做的,而不是: -

[OperationContract] 
[WebInvoke(UriTemplate="SetDate/" Method="POST")] 
void SetData(SetDataRequest setData); 

提交數據,如果你不這樣做,你會遇到安全/緩存問題時,應使用一個帖子。

+0

我沒有訪問服務器的服務器端,所以我綁定到HTTP GET。在這種情況下,HTTP POST不是一個選項。安全通過https協議綁定解決。 – Matej

+0

tbh它可能更容易有一個幫助對象,它只是將其序列化爲字符串。 –

+1

哦,安全性不能通過https來解決,緩存就是一個副作用!人們仍然可以對服務進行跨站點請求僞造攻擊。 –