0

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

[WebGet(UriTemplate = "")]

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

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

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

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

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

问题是现在http://localhost/items/help现在显示 404 错误而不是自动生成的帮助页面,因为它将 'help' 视为 'code' 参数的值(并且操作返回一个“没有记录匹配时的“未找到”状态)。

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

4

2 回答 2

0

尝试添加您的 .svc 地址。

所以不要这样做:

http://localhost/items/help

做喜欢

http://localhost/items.svc/help

它在此处的评论中: MSDN Rest Help

于 2012-07-26T17:10:16.997 回答
0

帮助页面停止工作的原因是helpEnabled定义为standardEndpointunder的属性webHttpEndpoint以某种方式替换为 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' 的方式,因此您会看到匹配的语法并认为 help 是为 REST 正确启用,因此您将问题归咎于 UriTemplates。

于 2012-07-26T23:10:04.637 回答