Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在RESTAPI调用中添加常量参数_C#_Rest_Wcf Rest_Servicecontract - Fatal编程技术网

C# 在RESTAPI调用中添加常量参数

C# 在RESTAPI调用中添加常量参数,c#,rest,wcf-rest,servicecontract,C#,Rest,Wcf Rest,Servicecontract,我从客户端进行WCF REST api调用。为此,我使用了一个类型为WebChannelFactory的专用对象,其中IRestApi是一个ServiceContract 然后,我可以通过我使用的通道(由CreateChannel()创建)调用IRestApi的方法 我的问题是:我可以向这个通道添加常量参数(在我的例子中是版本号),这样我就不必在每次调用中反复传递它了吗?我不确定对象/接口到底是如何组合在一起的,您也不清楚如何将这个版本发送到服务器。RESTAPI版本的正常方法是将版本放入URI

我从客户端进行WCF REST api调用。为此,我使用了一个类型为
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”?