项目梳理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 ...
随机推荐
- 解决重启服务器以后Nginx无法启动
今天重启服务器以后发现nginx服务器启动失败. 这应该是因为把nginx进程杀死后pid丢失了,下一次再开启nginx -s reload时无法启动,重装可以解决这个问题,但是太麻烦了. 然后这样就 ...
- 【Python】web.py初识学习
简单而直接的Python web 框架:web.py 2016年11月03日 14:09:08 擒贼先擒王 阅读数:35157更多 个人分类: Web From:https://www.oschi ...
- read 命令
read 用来接收标准输入 #!/bin/bash read -t -p "Please input a number:" number echo $number //把键盘输入的 ...
- Ubuntu Kylin 14.04 安装配置 jdk、eclipse、tomcat 通用
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qq1053781225/article/details/24810107 一.安装jdk ...
- java客户端调用ftp上传下载文件
1:java客户端上传,下载文件. package com.li.utils; import java.io.File; import java.io.FileInputStream; import ...
- hdu1181 (变形课)简单地dfs
http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=259#problem/F Description 呃......变形课上Harr ...
- Java读取Excel数据
Java读取Excel数据,解析文本并格式化输出 Java读取Excel数据,解析文本并格式化输出 Java读取Excel数据,解析文本并格式化输出 下图是excel文件的路径和文件名 下图是exce ...
- jquery.lazyload 使用
1.引用js <script src="jquery.js" type="text/javascript"></script> < ...
- Twitter OA prepare: Flipping a bit
You are given a binary array with N elements: d[0], d[1], ... d[N - 1]. You can perform AT MOST one ...
- Leetcode: Binary Tree Level Order Transversal
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...