项目梳理4——WebApi项目,使用注释填充Description字段
web.config中添加连接字符串:

为webapi添加Description,使用注释来填充此字段

对于所有引用的xxxx.base项目设置生成的xml文档,注意release、debug下都需设置,并重新生成

xxxxx.WebApi\Areas\HelpPage\XmlDocumentationProvider.cs中,添加构造函数,用于解析xml文件:
/// <summary>
/// Initializes a new instance of the <see cref="XmlDocumentationProvider"/> class.
/// </summary>
/// <param name="documentPath">The physical path to XML document.</param>
public XmlDocumentationProvider(string documentPath)
{
if (documentPath == null)
{
throw new ArgumentNullException("documentPath");
}
XPathDocument xpath = new XPathDocument(documentPath);
_documentNavigator = xpath.CreateNavigator();
}
xxxxx.WebApi\Areas\HelpPage\App_Start\HelpPageConfig.cs中,,Register(HttpConfiguration config)方法的开头,添加代码:
var server = HttpContext.Current.Server;
String[] xmlFiles = System.IO.Directory.GetFiles(server.MapPath("~/App_Data"), "*.xml");
if (xmlFiles == null || xmlFiles.Length == 0)
{
xmlFiles = System.IO.Directory.GetFiles(server.MapPath("~/Bin"), "*.xml");
} if (xmlFiles != null && xmlFiles.Length > 0)
{
MultipleXmlDocumentationProvider mp = new MultipleXmlDocumentationProvider(xmlFiles);
config.SetDocumentationProvider(mp);
}
xxxxx.WebApi\Areas\HelpPage路径下添加MultipleXmlDocumentationProvider.cs
public class MultipleXmlDocumentationProvider : IDocumentationProvider, IModelDocumentationProvider
{
List<XmlDocumentationProvider> _listProviders = new List<XmlDocumentationProvider>();
public MultipleXmlDocumentationProvider(params String[] xmlDocPaths)
{
InitDocuments(xmlDocPaths);
} /// <summary>
/// 初始化文档,主要修复SeeAlso部分内容
/// </summary>
/// <param name="xmlDocPaths">xml文档路径</param>
protected void InitDocuments(params String[] xmlDocPaths)
{
var listXmlDocs = new List<XDocument>();
foreach (var xmlPath in xmlDocPaths)
{
var content = System.IO.File.ReadAllText(xmlPath);
listXmlDocs.Add(XDocument.Parse(content));
} var dictNameNodes = new Dictionary<String, XElement>();
foreach (var xmlDoc in listXmlDocs)
{
var methodNodes = xmlDoc.Root.Descendants().Where(n => n.Name.LocalName == "member");
foreach (var mn in methodNodes)
{
var name = mn.Attribute("name").Value;
dictNameNodes[name] = mn;
}
} foreach (var xmlDoc in listXmlDocs)
{
var saNodes = xmlDoc.Root.Descendants().Where(n => n.Name.LocalName == "seealso").ToList();
foreach(var saNode in saNodes)
{
if (saNode.Attribute("cref") == null) continue;
var crefValue = saNode.Attribute("cref").Value;
if (dictNameNodes.ContainsKey(crefValue))
{
var a = dictNameNodes[crefValue];
XLinqUtil.ReplaceOuterXml(saNode, XLinqUtil.InnerXML(a));
}
//XLinqUtil.ReplaceInnerXml(saNode,)
}
} foreach (var xmlDoc in listXmlDocs)
{
using (var ms = new System.IO.StringReader(xmlDoc.ToString(SaveOptions.OmitDuplicateNamespaces)))
{
_listProviders.Add(new XmlDocumentationProvider(ms));
}
}
} public string GetDocumentation(System.Web.Http.Controllers.HttpParameterDescriptor parameterDescriptor)
{
String result = null;
foreach (var provider in _listProviders)
{
result = provider.GetDocumentation(parameterDescriptor);
if (result != null) return result;
}
return result;
} public string GetDocumentation(System.Web.Http.Controllers.HttpActionDescriptor actionDescriptor)
{
String result = null;
foreach (var provider in _listProviders)
{
result = provider.GetDocumentation(actionDescriptor);
if (result != null) return result;
}
return result;
} public string GetDocumentation(System.Web.Http.Controllers.HttpControllerDescriptor controllerDescriptor)
{
String result = null;
foreach (var provider in _listProviders)
{
result = provider.GetDocumentation(controllerDescriptor);
if (result != null) return result;
}
return result;
} public string GetResponseDocumentation(System.Web.Http.Controllers.HttpActionDescriptor actionDescriptor)
{
String result = null;
foreach (var provider in _listProviders)
{
result = provider.GetResponseDocumentation(actionDescriptor);
if (result != null) return result;
}
return result;
} public string GetDocumentation(System.Reflection.MemberInfo member)
{
String result = null;
foreach (var provider in _listProviders)
{
result = provider.GetDocumentation(member);
if (result != null) return result;
}
return result;
} public string GetDocumentation(Type type)
{
String result = null;
foreach (var provider in _listProviders)
{
result = provider.GetDocumentation(type);
if (result != null) return result;
}
return result;
}
}
项目梳理4——WebApi项目,使用注释填充Description字段的更多相关文章
- Asp.net WebApi 项目示例(增删改查)
1.WebApi是什么 ASP.NET Web API 是一种框架,用于轻松构建可以由多种客户端(包括浏览器和移动设备)访问的 HTTP 服务.ASP.NET Web API 是一种用于在 .NET ...
- OWIN 自宿主模式WebApi项目,WebApi层作为单独类库供OWIN调用
OWIN是Open Web Server Interface for .NET的首字母缩写,他的定义如下: OWIN在.NET Web Servers与Web Application之间定义了一套标准 ...
- WebAPI项目中使用SwaggerUI
1.创建webapi项目解决方案 2.引入Swagger组件 在项目引用中可以看到swagger的引用 3.webapi 项目右键属性->生成-> 勾选XML文档文件,然后将XML文件保存 ...
- AspNetCore网关集成Swagger访问使用IdentityServer保护的webapi项目
创建webapi项目 创建四个webapi项目,两个处理业务,一个网关,一个验证中心.四个项目对应的端口如下, ApiGateway:1999 IdentityServer:16690 Service ...
- .Net Core3.0 WebApi 项目框架搭建 五: 轻量型ORM+异步泛型仓储
.Net Core3.0 WebApi 项目框架搭建:目录 SqlSugar介绍 SqlSugar是国人开发者开发的一款基于.NET的ORM框架,是可以运行在.NET 4.+ & .NET C ...
- .Net Core3.0 WebApi 项目框架搭建 二:API 文档神器 Swagger
.Net Core3.0 WebApi 项目框架搭建:目录 为什么使用Swagger 随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染.后端分离的形态,而且前端技术和后端技 ...
- .Net Core3.0 WebApi 项目框架搭建 四:JWT权限验证
.Net Core3.0 WebApi 项目框架搭建:目录 什么是JWT 根据维基百科定义,JWT(读作 [/dʒɒt/]),即JSON Web Tokens,是一种基于JSON的.用于在网络上声明某 ...
- Restful WebApi项目开发实践
前言 踩过了一段时间的坑,现总结一下,与大家分享,愿与大家一起讨论. Restful WebApi特点 WebApi相较于Asp.Net MVC/WebForm开发的特点就是前后端完全分离,后端使用W ...
- 基于空项目模板创建使用Owin来host的WebApi项目
首先创建一个空的web项目,如下图所示: 项目创建成功以后,安装下面三个package. Install-Package Microsoft.AspNet.WebApi -Version 5.2.2I ...
随机推荐
- 远程调用Spark平台中的程序
用scala语言,开发好了在spark平台上可以一直运行的机器学习模型 现在有个需求: 要远程调用该模型的一些方法并获取结果 那么可以使用jetty在服务器端主节点占用一个端口然后对外提供http服务 ...
- Javascript-涨工资案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 总结《二》MFC中WinMain和CALLBACK
MFC中WinMain和回调函数CALLBACK 一,路线 1.一般普通窗口或控件建立调用的CWnd :: CreateEx函数 2.经过资源对话框创建的即不调用的CWnd ...
- python+Django框架运用(二)
Django应用 与 模板 应用就是网站中的一个独立的程序模块,在Django 中,主目录一般不处理用户的具体请求, 主目录主要做的是项目的初始化和设置,以及请求的分发. 创建应用 1. 创建应用命令 ...
- 持续集成之三:搭建Maven私服Nexus
安装环境 Red Hat Enterprise Linux Server release 7.3 (Maipo) jdk1.7.0_80 apache-tomcat-7.0.90 mysql-5.7. ...
- 拉取远程仓库到本地错误The authenticity of host 'github.com (13.229.188.59)' can't be established.
1.个人在github上面创建了仓库,通过本地的git拉取远程仓库到本地报错信息如下: 这是因为Git使用SSH连接,而SSH第一次连接需要验证GitHub服务器的Key.确认GitHub的Key的指 ...
- Linux基础命令---cut
cut 将文件中每一行的指定内容显示到标准输出. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法 cut [ ...
- linux服务器---安装swat
安装swat swat是一个图形化的samba管理软件,可以帮助不熟悉的人去灵活的配置samba服务, 1.安装swat [root@localhost wj]#yum install -y samb ...
- Linux基础命令---cp
cp 复制文件,可以将一个文件复制到另外一个地方,也可以将多个文件复制到目录. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语 ...
- 用户可在Messenger内读书并与角色互动
畅销小说作家 James Patterson 与 Facebook 合作,为新书<The Chef>在 Messenger 推出互动体验版. 10 月 30 日下午消息,据<香港经济 ...