首页 > 编程语言 >ASP.NET Web API RC版本新特性:Web API的帮助文档制作

ASP.NET Web API RC版本新特性:Web API的帮助文档制作

时间:2022-10-24 17:03:09浏览次数:72  
标签:Web ASP return string API NET

InfoQ上有一篇文章是 使用IAPIExplorer列举ASP.NET Web API,文章针对的版本是ASP.NET Web API Beta版本写,IAPIExplorer已经包含在RC版本里了...

InfoQ上有一篇文章是 ​​使用IAPIExplorer列举ASP.NET Web API​​,文章针对的版本是ASP.NET Web API Beta版本写,IAPIExplorer已经包含在RC版本里了,而且发现ASP.NET Web API的HttpConfiguration 的RC版本比Beta版本多了一个属性:

public DefaultServices Services { get; internal set; }

Debug进去可以看到默认有18个服务,IAPIExplorer 就是其中之一:

ASP.NET Web API RC版本新特性:Web API的帮助文档制作_xml

使用该API可以完成的工作有:

  • 产生文档
  • 创建机器可读的元数据
  • 创建一个测试客户端

微软员工Yao发表了两篇文章(​​ASP.NET Web API: Introducing IApiExplorer/ApiExplorer​​​和​​ASP.NET Web API: Generating a Web API help page using ApiExplorer​​)分别用于展示如何使用API打印Web API列表以及如何创建帮助文档。

所以我们创建帮助文档主要就是参照这篇文章就可以了​​ASP.NET Web API: Generating a Web API help page using ApiExplorer​​;作者在文章里面已经实现了一个IDocumentationProvider,它是通过代码的注释XML文档去生成,这是一个非常好的实现了:

public class XmlCommentDocumentationProvider : IDocumentationProvider  
{
XPathNavigator _documentNavigator;
private const string _methodExpression = "/doc/members/member[@name='M:{0}']";
private static Regex nullableTypeNameRegex = new Regex(@"(.*\.Nullable)" + Regex.Escape("`1[[") + "([^,]*),.*");
public XmlCommentDocumentationProvider(string documentPath)
{
XPathDocument xpath = new XPathDocument(documentPath);
_documentNavigator = xpath.CreateNavigator();
}
public virtual string GetDocumentation(HttpParameterDescriptor parameterDescriptor)
{
ReflectedHttpParameterDescriptor reflectedParameterDescriptor = parameterDescriptor as ReflectedHttpParameterDescriptor;
if (reflectedParameterDescriptor != null)
{
XPathNavigator memberNode = GetMemberNode(reflectedParameterDescriptor.ActionDescriptor);
if (memberNode != null)
{
string parameterName = reflectedParameterDescriptor.ParameterInfo.Name;
XPathNavigator parameterNode = memberNode.SelectSingleNode(string.Format("param[@name='{0}']", parameterName));
if (parameterNode != null)
{
return parameterNode.Value.Trim();
}
}
}
return "No Documentation Found.";
}
public virtual string GetDocumentation(HttpActionDescriptor actionDescriptor)
{
XPathNavigator memberNode = GetMemberNode(actionDescriptor);
if (memberNode != null)
{
XPathNavigator summaryNode = memberNode.SelectSingleNode("summary");
if (summaryNode != null)
{
return summaryNode.Value.Trim();
}
}
return "No Documentation Found.";
}
private XPathNavigator GetMemberNode(HttpActionDescriptor actionDescriptor)
{
ReflectedHttpActionDescriptor reflectedActionDescriptor = actionDescriptor as ReflectedHttpActionDescriptor;
if (reflectedActionDescriptor != null)
{
string selectExpression = string.Format(_methodExpression, GetMemberName(reflectedActionDescriptor.MethodInfo));
XPathNavigator node = _documentNavigator.SelectSingleNode(selectExpression);
if (node != null)
{
return node;
}
}
return null;
}
private static string GetMemberName(MethodInfo method)
{
string name = string.Format("{0}.{1}", method.DeclaringType.FullName, method.Name);
var parameters = method.GetParameters();
if (parameters.Length != 0)
{
string[] parameterTypeNames = parameters.Select(param => ProcessTypeName(param.ParameterType.FullName)).ToArray();
name += string.Format("({0})", string.Join(",", parameterTypeNames));
}
return name;
}
private static string ProcessTypeName(string typeName)
{
//handle nullable
var result = nullableTypeNameRegex.Match(typeName);
if (result.Success)
{
return string.Format("{0}{{{1}}}", result.Groups[1].Value, result.Groups[2].Value);
}
return typeName;
}
}

把XML 文档的位置在Application_Start 中将IDocumentationProvider服务替换为我们的自定义服务。

var config = GlobalConfiguration.Configuration;
config.Services.Replace(typeof(IDocumentationProvider), new XmlCommentDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/MvcApplication2.XML")));有个ApiExplorerSettingsAttribute 可以控制API是否在帮助页面上出现:
/// <summary>
/// DELETE api/values/5
/// </summary>
/// <param name="id"></param>
[ApiExplorerSettings(IgnoreApi = true)]
public void Delete(int id)
{
}

还可以控制整个ApiController 的文档是否发布出来,只需要通过在类级别应用ApiExplorerSettingsAttribute

[ApiExplorerSettings(IgnoreApi = true)]
public class MySpecialController : ApiController
{

通过IAPIExplorer 这个API我们可以为我们的Web API 做出很棒的文档了,而且这个接口的设计也是可扩展的。可以制作Web页面也可以制作一个HelpController来做,推荐封装成一个HelpController,这样就可以适应WebAPi的Web Host或者是Self Host了。 

​Part 1: Basic Help Page customizations​

Changing the help page URI

Providing API documentations

Customizing the view

​Part 2: Providing custom samples on the Help Page​

Setting custom sample objects

Setting the samples when the action returns an HttpResponseMessage

​Part 3: Advanced Help Page customizations​

Adding additional information to the HelpPageApiModel

Creating new sample display templates

​Making ASP.NET Web API Help Page work on self-hosted services​

​Extending Web API Help Page with information from attributes​

​Using curl to POST request into ASP.NET Web Api service​


标签:Web,ASP,return,string,API,NET
From: https://blog.51cto.com/shanyou/5790418

相关文章

  • http响应Last-Modified和ETag以及asp.net web api实现
    基础知识1)什么是”Last-Modified”?在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标........
  • 使用SuperWebSocket 构建实时 Web 应用
    Web应用的信息交互过程通常是客户端通过浏览器发出一个请求,服务器端接收和审核完请求后进行处理并返回结果给客户端,然后客户端浏览器将信息呈现出来,这种机制对于信息变化不......
  • 发布一个定制的webpart:RssReader
    RssReaderWebPart是一个RSS新闻阅读器,RSS阅读器自动更新你定制的网站内容,保持新闻的及时性     此webpart改造自海洋工作室(​​​http://ww......
  • html5中播放rtsp流实现监控、直播等方案(利用Ffmpeg + node.js + websocket + flv.js实
    前提:需要确认你的服务器环境中是否安装了ffmpeg这个工具,因为转码的核心其实就是通过 ffmpeg命令 转码,需要你通过在命令行里输入 ffmpeg 来确认。   安装参考:htt......
  • kubernetes 客户端KubeClient使用及常用api
    KubeClient是kubernetes的C#语言客户端简单易用,KubeClient是.NETCore(目标​​netstandard1.4​​​)的可扩展KubernetesAPI客户端,github地址:​​https://github.com/tin......
  • 为什么 web 开发人员需要迁移到. NET Core, 并使用 ASP.NET Core MVC 构建 web 和 web
    ​​2018.NET开发者调查报告:.NETCore是怎么样的状态​​,这里我们看到了还有非常多的.net开发人员还在观望,本文给大家一个建议。这仅代表我的个人意见,我有充分的理由......
  • C# WebAPI 项目
    备注:对于C#开发人员,接口服务大部分是WCF(需要配置很多),WebService(走的XML,相比json同样的内容大很多),一般应用程序(大量接口可能会有点麻烦),WebAPi则借鉴了以上的有点,屏蔽了......
  • Selenium4Web自动化11-分布式测试Grid入门到实战
    一、Grid介绍要在多台计算机上并行运行测试吗?那么,Grid正是为你准备的.SeleniumGrid允许通过路由命令在远程机器上执行WebDriver脚本,这些命令由客户机发送到远程浏览......
  • ASP.NET 4 AppFabric 输出缓存提供程序
    缓存是用来保存你数据的地方,从而使你的应用程序访问更快速。缓存可以根据你的需要分配到许多台机器上,而开发人员无需关心数据究竟在哪台机器上。为了获得......
  • Selenium4Web自动化7-文件上传和日期控件
    一、文件上传操作-input标签文件选择当input元素为文件类型时,文件上传对话框可以使用Selenium处理.文件上传的代码实现如下fromseleniumimportwebdriverfromwebd......