asp.net core webapi多項(xiàng)目解決方案Swagger注釋無(wú)法獲取解決方案

問(wèn)題描述

在webapi項(xiàng)目中使用swagger作為接口文檔是個(gè)很好的選擇,但是有時(shí)候會(huì)遇到一些小問(wèn)題。在單項(xiàng)目中大家都知道swagger會(huì)解析項(xiàng)目生成的xml注釋文件,將注釋添加到接口信息。但是如果分成多個(gè)項(xiàng)目會(huì)遇到注釋只會(huì)在webapi項(xiàng)目中有解析,依賴(lài)的項(xiàng)目中的注釋無(wú)法解析的情況。

問(wèn)題原因

在配置swagger過(guò)程中,為了加入注釋?zhuān)枰腠?xiàng)目生成的xml注釋文檔。但是一個(gè)項(xiàng)目的注釋文檔只會(huì)生成自身的注釋文檔。他依賴(lài)的項(xiàng)目注釋并不會(huì)放入。于是乎swagger就認(rèn)為你引用的Model沒(méi)有注釋。當(dāng)然不會(huì)有描述了。

解決方案

其實(shí)很簡(jiǎn)單的思路。在項(xiàng)目啟動(dòng)文件里,執(zhí)行文檔合并的代碼。將依賴(lài)的項(xiàng)目文檔合并到主項(xiàng)目的文檔中去。

具體實(shí)現(xiàn)

在各個(gè)需要生成注釋文檔的csproj文件里加入如下節(jié)點(diǎn)

  <PropertyGroup>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
  </PropertyGroup>

合并文檔代碼

            var directory = AppDomain.CurrentDomain.BaseDirectory;
            // 找到所有的注釋文檔, 根據(jù)你的項(xiàng)目情況加上通配符。
            var files = Directory.GetFiles(directory, "XXX.xml").ToList();
           // 找到你的主項(xiàng)目注釋文檔
            var mainFile = files.Where(u => u.Contains("XXXMain.xml")).FirstOrDefault();
            if (string.IsNullOrEmpty(mainFile))
                return;
            files.Remove(mainFile);
            if (files.Count == 0)
                return;
            var mainDoc = new XmlDocument();
            mainDoc.Load(mainFile);
            var membersNode = mainDoc.SelectSingleNode("http://members");
            files.ForEach(file => {
                var doc = new XmlDocument();
                doc.Load(file);
                var nodes = doc.SelectNodes("http://member");
                foreach(XmlNode node in nodes)
                {
                    var importNode = mainDoc.ImportNode(node, true);
                    membersNode.AppendChild(importNode);
                }
            });
            files.ForEach(u =>
            {
                File.Delete(u);
            });
            mainDoc.Save(mainFile);

缺陷

會(huì)導(dǎo)致應(yīng)用啟動(dòng)會(huì)慢一點(diǎn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,586評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,108評(píng)論 25 709
  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱(chēng)項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明AI閱讀 16,210評(píng)論 3 119
  • 1.標(biāo)識(shí)符 在java中有些名字是可以自定義的,如類(lèi)名、接口名、常量、變量、包名等。稱(chēng)為自定義標(biāo)識(shí)符 需注意的細(xì)節(jié)...
    CCChaya閱讀 444評(píng)論 0 0
  • 小時(shí)候,幸福是件簡(jiǎn)單的事,長(zhǎng)大后,簡(jiǎn)單是很幸福的事。 小時(shí)候,我的幸福就是雨后在小石子路撿漂亮的小石頭,爬山上最大...
    葶瞸閱讀 294評(píng)論 0 0

友情鏈接更多精彩內(nèi)容