【问题标题】:add constant parameters in rest api calls在 rest api 调用中添加常量参数
【发布时间】:2014-12-01 20:11:23
【问题描述】:

我从客户端进行 WCF REST api 调用。为此,我使用了WebChannelFactory<IRestApi> 类型的专用对象,其中IRestApi 是一个ServiceContract。

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

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

【问题讨论】:

  • 不能将Version 属性添加到IRestApi
  • @DavidG,我不确定你的意思。 IRestApi 是定义客户端和服务器之间的休息合同的接口。 IRestApi 有很多方法。我可以为这些方法中的每一个添加一个“版本”参数,但我想也许我有更好、更优雅的方法来做到这一点,因为版本属性是恒定的(所以我想将它加载到通道中).. .
  • 您是否通过 HTTP 访问 API?你可以在那里添加一个标题。
  • @DavidG,你是对的,我考虑过这个选项,它应该可以工作。我不这样做,因为有时我需要能够直接从浏览器调用此服务(而且我无法在浏览器的调用中添加标头......)
  • @thecoshman 你能不能在低视角、零投票、半岁的问题上将“rest”大量编辑成“REST”?

标签: c# rest wcf-rest servicecontract


【解决方案1】:

我不确定您的对象/接口是如何组合在一起的,您也不清楚您希望如何将此版本发送到服务器。 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;
  }
}

这实际上可能不称为装饰器模式,但重要的是思想,而不是你所说的。

【讨论】:

    猜你喜欢
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多