如何将UriTemplate设置为Web服务?

时间:2015-04-22 09:12:50

标签: c# web-services restful-url uritemplate

如何像这样设置UriTepmlate Attr:

/ FunctionName {json_data}

因为使用此网络服务的人打算这样打电话

例如: http://localhost/xxx/service/Func { “×”: “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);

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

1 个答案:

答案 0 :(得分:0)

您无法以这种方式设置它。原因是"?"在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);

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