如何将 UriTemplate 设置为 Web 服务?

How to set UriTemplate a Web Service?

如何设置 UriTemplate 属性:

/函数名?{json_data}

因为使用此 Web 服务的人应该这样称呼

例如: http://localhost/xxx/service/Func?{"x":"aaa","y":"bbb"}

我试过了

[OperationContract]
    [WebGet(UriTemplate = "/Func?{request}",
        BodyStyle = WebMessageBodyStyle.Bare,
        ResponseFormat = WebMessageFormat.Json)]
    Result Func(string request);

比我弄错了:

UriTemplate“/Func?{request}”无效;查询字符串的每个部分都必须采用 'name' 或 'name=value' 形式,其中 name 是一个简单的文字。有关详细信息,请参阅 UriTemplate 的文档。 参数名称:模板

当我设置那个时

 [OperationContract]
    [WebGet(UriTemplate = "/Func?request={request}",
        BodyStyle = WebMessageBodyStyle.Bare,
        ResponseFormat = WebMessageFormat.Json)]
    Result Func(string request);

它工作正常,但这不是他们想要的。

不能这样设置。这样做的原因是“?”在 URL 中表示 URL 参数将跟随,并且 URL 参数始终采用 "name=value"

形式

你可以做

[OperationContract]
[WebGet(UriTemplate = "/Func?request={request}",
    BodyStyle = WebMessageBodyStyle.Bare,
    ResponseFormat = WebMessageFormat.Json)]
Result Func(string request);

[OperationContract]
[WebGet(UriTemplate = "/Func/{request}",
    BodyStyle = WebMessageBodyStyle.Bare,
    ResponseFormat = WebMessageFormat.Json)]
Result Func(string request);

如果你像上一个例子那样做,你的参数请求只能是一个字符串。