将URI参数映射到参数对象的属性?

Mat*_*ias 5 c# rest wcf json web-services

我正在尝试创建一个提供SOAP和JSON端点的WCF服务.
为了将请求URL的参数映射到方法参数,我使用WebGetAttributeUriTemplate方法.

这适用于期望简单数据类型参数的方法.

但是,以下方法需要一个复杂的对象,我不想因为服务的SOAP部分而改变它:

[OperationContract]
Person Test(TestParameters parameters);
Run Code Online (Sandbox Code Playgroud)

而TestParameters看起来像(具有更多的属性):

[DataContract]
public class TestParameters
{
    [DataMember]
    public string First
    {
        get;
        set;
    }
    [DataMember]
    public string Second
    {
        get;
        set;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在通过GET调用方法时,我希望能够初始化parameters.Firstparameters.Second从请求URI中进行初始化,例如

/Test?first=Foo&second=Bar
Run Code Online (Sandbox Code Playgroud)

我已经尝试过申请了

[WebGet(UriTemplate = "/Test?first={parameters.First}&second={parameters.Second})]
Run Code Online (Sandbox Code Playgroud)

方法.
但是,WCF似乎不支持此语法.错误消息说:

System.InvalidOperationException:合同'IService1'中的操作'Test'有一个UriTemplate,它需要一个名为'PARAMETERS.FIRST'的参数,但是在操作中没有带有该名称的输入参数.

是否有其他语法允许将URI参数映射到参数对象的属性?

否则,您是否知道是否可以轻松添加此行为?

非常感谢您的回复!

dig*_*ire 1

您必须求助于 JSON,例如与 PUT 或 POST 方法结合使用。请参阅这篇文章以获得解释。