2014-10-07 87 views
0

我从客户端调用WCF REST API调用。为此,我使用WebChannelFactory<IRestApi>类型的专用对象,其中IRestApi是ServiceContract。在静态API调用中添加常量参数

然后,我可以通过我使用的通道(由创建)调用IRestApi的方法。

我的问题是:我可以添加常量参数到这个通道(在我的情况下是一个版本号),所以我不必一遍又一遍地在每个调用中传递它?

+0

您无法将'Version'属性添加到'IRestApi'? – DavidG 2014-10-07 11:56:44

+0

@DavidG,我不确定你的意思。 IRestApi是定义客户端和服务器之间剩余契约的接口。 IRestApi有很多方法。我可以为这些方法中的每一个添加一个“版本”参数,但我想也许我有一个更好,更优雅的方式来做到这一点,因为version属性是常量(所以我想将它加载到cannel).. – user1028741 2014-10-07 12:03:11

+0

您是否正在通过HTTP访问API?你可以在那里添加一个头文件。 – DavidG 2014-10-07 12:04:55

回答

0

我不确定您的对象/接口是如何组合在一起的,您也不清楚如何将此版本发送到服务器。使用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模式,但这个想法是最重要的,不是你所说的。