我从客户端调用WCF REST API调用。为此,我使用WebChannelFactory<IRestApi>
类型的专用对象,其中IRestApi
是ServiceContract。在静态API调用中添加常量参数
然后,我可以通过我使用的通道(由创建)调用IRestApi的方法。
我的问题是:我可以添加常量参数到这个通道(在我的情况下是一个版本号),所以我不必一遍又一遍地在每个调用中传递它?
我从客户端调用WCF REST API调用。为此,我使用WebChannelFactory<IRestApi>
类型的专用对象,其中IRestApi
是ServiceContract。在静态API调用中添加常量参数
然后,我可以通过我使用的通道(由创建)调用IRestApi的方法。
我的问题是:我可以添加常量参数到这个通道(在我的情况下是一个版本号),所以我不必一遍又一遍地在每个调用中传递它?
我不确定您的对象/接口是如何组合在一起的,您也不清楚如何将此版本发送到服务器。使用REST API版本的常规方法是将版本放入URI中,有点像example.com/service/v8/...
。
在这种情况下,也许你可以使用一个装饰器对象,它可以包装这个WebChannel
(我假设这是你可以调用类似.get("/some/url")
的类型)。你的装饰者将能够'注入'额外的数据。
你叫decoratedObject.setURLPreFix("/some_serivce/v3")
,然后decoratedObject.get("/some/url")
,装饰功能将实施类似...
class WebChannelDecorator{
WebChannel channel;
String urlPrefix = "";
WebChannelDecorator(WebChannel c){
channel = c;
}
/* methods you want to work just the same */
T foo(args){
return channel.foo(args);
}
/* methods you want to 'decorate' */
T get(String url){
return channel.get(urlPrefix + url);
}
void setURLPrefix(String prefix){
urlPrefix = prefix;
}
}
这可能不是真正被称为Decorator模式,但这个想法是最重要的,不是你所说的。
您无法将'Version'属性添加到'IRestApi'? – DavidG 2014-10-07 11:56:44
@DavidG,我不确定你的意思。 IRestApi是定义客户端和服务器之间剩余契约的接口。 IRestApi有很多方法。我可以为这些方法中的每一个添加一个“版本”参数,但我想也许我有一个更好,更优雅的方式来做到这一点,因为version属性是常量(所以我想将它加载到cannel).. – user1028741 2014-10-07 12:03:11
您是否正在通过HTTP访问API?你可以在那里添加一个头文件。 – DavidG 2014-10-07 12:04:55