【问题标题】:WCF REST help page conflicts with UriTemplateWCF REST 帮助页面与 UriTemplate 冲突
【发布时间】:2012-07-27 07:10:04
【问题描述】:

我有一个根 UriTemplate,它在未指定参数时返回默认数据。

[WebGet(UriTemplate = "")]

我已经在几个例子中看到了这种方法。

但是,我添加了另一个接受简单路径变量的模板:

[WebGet(UriTemplate = "{code}")]

然后将通过代码过滤默认列表。

例如 http://localhost/items(作为基础 ServiceRoute)显示默认的项目列表,而 http://localhost/items/ABC显示项目“ABC”。

问题是现在 http://localhost/items/help 现在显示 404 错误而不是自动生成的帮助页面,因为它认为 'help' 作为 ' code' 参数(当没有记录匹配时,操作返回“Not Found”状态)。

关于如何保留 UriTemplate 但又不会丢失帮助页面的任何想法?

【问题讨论】:

  • 问题是我的 web.config 中的配置元素错误,现在看起来很明显,但我没有看到。请参阅下面我自己的答案。

标签: c# wcf rest


【解决方案1】:

尝试添加您的 .svc 地址。

所以不要这样做:

http://localhost/items/help

这样做

http://localhost/items.svc/help

它在 cmets 从这里开始: MSDN Rest Help

【讨论】:

  • 它是 .Net 4 并使用 RouteTable 来消除 .svc 扩展名:RouteTable.Routes.Add(new ServiceRoute("items", new WebServiceHostFactory(), typeof(MyItemsService)));
【解决方案2】:

帮助页面停止工作的原因是,webHttpEndpoint 下定义为 standardEndpointhelpEnabled 属性不知何故被 wcf 'soap' 元数据启用配置替换。

因此,在 REST .Net 4.0 中启用帮助页面的正确 web.config 部分是,有据可查:

<system.serviceModel>
 <standardEndpoints>
  <webHttpEndpoint>
    <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/>
  </webHttpEndpoint>
</standardEndpoints>

尽管我从 Microsoft/Tony Sneed 模板开始创建 REST 项目,并正确配置了此项目,但我认为发生的事情是我还向 Web 应用程序添加了一个 OData 服务。不管是不是这个原因,上面的配置都被替换为:

<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

现在,如果您盯着足够长的时间并在凌晨 1 点 google 'help page wcf rest',这当然是为 wcf 'soap-style' 服务启用 wsdl 'help' 的方式,因此您会看到匹配的语法并思考该帮助已为 REST 正确启用,因此您将问题归咎于 UriTemplates。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多