2012-07-26 76 views
0

我有一個根UriTemplate,它在未指定參數時返回默認數據。WCF REST幫助頁面與UriTemplate衝突

[WebGet(UriTemplate = "")] 

我在幾個例子中看到了這種方法。

然而,我加入另一個模板接受一個簡單的路徑變量:

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

然後這將由代碼過濾默認列表。

因此,例如HTTP://本地主機/項目(作爲鹼ServiceRoute)顯示的項目的默認列表,和HTTP://本地主機/項目/ ABC顯示項目 'ABC'。

問題是,現在http:// localhost/items/help現在顯示404錯誤,而不是自動生成的幫助頁面,因爲它將'help'看作'code'參數的值當沒有記錄匹配時操作返回「未找到」狀態)。

有關如何保留該UriTemplate但不失去幫助頁面的任何想法?

+0

問題是我web.config中的錯誤配置元素,現在看起來很明顯,但我沒有看到它。在下面看到我自己的答案。 – mdisibio 2012-07-26 23:11:38

回答

0

的幫助頁面停止工作的原因是因爲在webHttpEndpoint下定義爲standardEndpointhelpEnabled屬性是someho w替換爲wcf'soap'元數據啓用配置。

因此,對於能夠幫助頁面中REST .NET 4.0的正確的web.config部分,是因爲有據可查:

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

即使我開始與微軟/託尼·斯尼德模板創建REST項目,正確配置它,我想到的是我還向Web應用程序添加了OData服務。不管是不是就是這個原因,上面的配置得到了替換爲:

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

現在,如果你盯着那個足夠長的時間,並在凌晨1點谷歌的幫助頁面WCF休息「,這當然是WSDL如何「幫助」已啓用wcf'soap-style'服務,因此您會看到匹配的語法,並認爲REST正確啓用了幫助,因此您將問題歸咎於UriTemplates。

0

嘗試添加您的.svc地址。的

所以不是做喜歡:

http://localhost/items/help 

做到像

http://localhost/items.svc/help 

這是在評論從這裏: MSDN Rest Help

+0

它是.Net 4並使用RouteTable消除.svc擴展:RouteTable.Routes.Add(new ServiceRoute(「items」,new WebServiceHostFactory(),typeof(MyItemsService))); – mdisibio 2012-07-26 19:59:19