C# 在RESTAPI调用中添加常量参数
我从客户端进行WCF REST api调用。为此,我使用了一个类型为C# 在RESTAPI调用中添加常量参数,c#,rest,wcf-rest,servicecontract,C#,Rest,Wcf Rest,Servicecontract,我从客户端进行WCF REST api调用。为此,我使用了一个类型为WebChannelFactory的专用对象,其中IRestApi是一个ServiceContract 然后,我可以通过我使用的通道(由CreateChannel()创建)调用IRestApi的方法 我的问题是:我可以向这个通道添加常量参数(在我的例子中是版本号),这样我就不必在每次调用中反复传递它了吗?我不确定对象/接口到底是如何组合在一起的,您也不清楚如何将这个版本发送到服务器。RESTAPI版本的正常方法是将版本放入URI
WebChannelFactory
的专用对象,其中IRestApi
是一个ServiceContract
然后,我可以通过我使用的通道(由CreateChannel()
创建)调用IRestApi的方法
我的问题是:我可以向这个通道添加常量参数(在我的例子中是版本号),这样我就不必在每次调用中反复传递它了吗?我不确定对象/接口到底是如何组合在一起的,您也不清楚如何将这个版本发送到服务器。RESTAPI版本的正常方法是将版本放入URI中,有点像
example.com/service/v8/…
在这种情况下,也许您可以使用一个decorator对象来包装这个WebChannel
(我想这就是您将调用类似.get(“/some/url”)
的类型)。你的装饰者将能够“注入”额外的数据
调用decoratedObject.setURLPreFix(“/some\u serivce/v3”)
,然后调用decoratedObject.get(“/some/url”)
,decorator函数的实现类似于
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;
}
}
这实际上可能不是所谓的装饰模式,但重要的是理念,而不是你所说的。你不能将
Version
属性添加到IRestApi
?@DavidG,我不确定你的意思。IRestApi是一个定义客户端和服务器之间rest契约的接口。IRestApi有很多方法。我可以为这些方法中的每一个添加一个“version”参数,但我想也许我有更好、更优雅的方法,因为version属性是常量(所以我想将其加载到cannel)…您是否通过HTTP访问API?您可以在那里添加一个标题。@DavidG,您是对的,我考虑过这个选项,它应该可以工作。我不这样做,因为我有时需要能够直接从浏览器调用此服务(并且我无法在浏览器的调用中添加标题…)@Coshman您是否可以在低视图、零投票、半年前的问题上将“rest”批量编辑为“rest”?