2011-10-24 41 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来解决,缓存就是一个副作用!人们仍然可以对服务进行跨站点请求伪造攻击。 –