我一直在自定義元數據頁面,並且遇到了一個有趣的問題,其中在IndexPageFilter篩選器事件中,試圖重命名OperationNames中的操作失敗(僅在調試模式下!)。ServiceStack V4元數據索引頁面 - 重命名操作名稱
我實際上做的是清除列表,並生成一個新的字符串列表(實際上是超鏈接),顯示路徑和動詞 INSTEAD DTO類名。
因此,例如,「AuthenticateUser」將顯示爲「POST/authenticate」(但它實際上是一個超鏈接,指向原始的,並且仍在工作的AuthenticateUser詳細信息頁面,如api/json/metadata?op =的authenticateUser)。
有趣的是,它的作品當SS調試模式設置爲true就好了:
SetConfig(new HostConfig{DebugMode = true});
然而,當它沒有調試模式,索引頁將不會顯示任何鏈接。所以,我想知道如果我嘗試這種類型的自定義,或者如果這是一個錯誤,因爲它在調試模式下實際上效果很好。
自定義API文檔的格式對我們來說是一個必需的特性,我們試圖擺脫Swagger(因爲缺乏對複雜類型可選參數的支持)。隨着最新的V4.32更新時,SS機元數據的頁面幾乎在一個水平,我們就可以開始在生產中使用它們......在2014年10月3日
編輯:
我不是我確定我明確提出了問題,所以我會再試一次。
這是一個基本的元數據索引頁:https://devlab-api.betasabrina.com/api/metadata
在這裏操作我們的請求類的名字命名 - 但我們不希望他們這樣的命名方式,因爲我們的許多開發商不使用ServiceStackClient ,他們更喜歡路線,或者組合。
所以問題是,我怎麼做(以第一行爲例)「AddRemoveServiceDomain」顯示爲其動詞+ route(POST/api/services/{ServiceGuid}/domains/{Domain})?
當前,您可以在調試模式下替換文本,並顯示所有操作 - 但不能在SS調試模式設置爲false時變爲空列表。
編輯於2014年10月6日
這是與索引頁面上的缺漏的元數據瑞普問題的代碼:
private void IndexPageFilter(IndexOperationsControl indexPage)
{
//clear the original OperationNames
indexPage.OperationNames.Clear();
//get a list of the new operation titles names we want to expose, sorted, etc
var sortedPaths = this.RestPaths.Where(r => !string.IsNullOrEmpty(r.AllowedVerbs)).OrderBy(r => r.Path).ThenBy(r => r.AllowedVerbs);
foreach (var s in sortedPaths)
{
//only show routes with verbs
var verbs = s.AllowedVerbs != null ? s.AllowedVerbs.PadRight(10, ' ') : "";
verbs = verbs.Replace(" ", " ");
var pathText = string.Format("{0} {1}", verbs, s.Path);
//create an html link (I know this is a hack... and disables the JSON link)
var link = string.Format("<a href='json/metadata?op={0}' >{1}</a>", s.RequestType.Name, pathText);
indexPage.OperationNames.Add(link);
}
}
現在,如果
SetConfig(new HostConfig{DebugMode = true});
代碼SS框架將允許生成這些鏈接,並將按預期顯示......但是,當Debug = false時,索引頁面將顯示爲空(因爲OperationNames的列表不符合請求DTO類名稱)。
我知道我在做什麼操縱索引列表是hacky ...但也許這種類型的黑客攻擊表明需要在元數據索引頁面上啓用更深層次的自定義......或者很可能是我錯誤地攻擊了這個自定義問題。
再次感謝您的辛勤工作:)
喬丹
請提供您的定製元數據頁面的副本,以便我們重新處理該問題。 – mythz 2014-10-04 17:14:24