继续使用记录的第二节,HelpPage的优化与测试工具WebApiTestClient的使用。

  之前没怎么整理博客,都是记录一下笔记,真正好好整理发现没想像的那么简单。不管怎么说还是培养下写博客的习惯吧,不管写的好与不好,学习了总要分享一下才对,开干!

  本节目录

  HelpPage页面修改+自定义api列表

   页面修改

   显示备注与Model的描述信息

   自定义api列表

  测试工具WebApiTestClient的使用

   安装与配置

   固定header参数处理

  正文开始!

  一、HelpPage页面修改+自定义api列表

  如果使用的较低版本的api,没有HelpPage的话可以使用nuget安装HelpPage  

  1. install-package Microsoft.AspNet.WebApi.HelpPage

  

  1.页面基本的文字样式等修改

     我这里为了截图方便之更改了文字信息,个人可根据自己的需要修改

  

  黑色背景部分的文件在根目录Views/Shared/_Layout.cshtml,不是helppage下的模板页

  中间内容区域是HelpPage下的Index.cshtml页面

  2.显示备注与Model的描述信息

  第一步:生成XML文件,右键项目--属性--生成选项卡(左侧)--输出模块(右侧),勾选XML文档文件,并配置路径和文件名

  

  第二步:修改HelpPage的配置信息(HelpPage/App_Start/HelpPageConfig.cs),将Register中的下面这句话取消注释,并将MapPath中的文件地址改成第一步中配置的

  

  1. config.SetDocumentationProvider(new XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/SampleAPI.xml")));

  启动项目,再看一下Help页面Api列表中是不是已经显示出了你的备注内容,嘿嘿~

  

  扩展:

  ①泛型Model的属性备注内容不显示

  方案:修改XmlDocumentationProvider.cs中的方法GetTypeName,在string genericTypeName = genericType.FullName;后直接return.  

  1. Type[] genericArguments = type.GetGenericArguments();
  2. string genericTypeName = genericType.FullName;
  3.  
  4. return genericTypeName; //处理泛型不显示注释问题

  

  ②接口返回Model或入参Model不在当前API项目中

  方案:将Model所在项目的Xml生成路径配置到API项目的App_Data下,然后修改HelpPageConfig和XmlDocumentationProvider两个文件

  

  

  1. //HelpPageConfig修改
  2.  
  3. config.SetDocumentationProvider(new XmlDocumentationProvider(
  4. HttpContext.Current.Server.MapPath("~/App_Data")));
  5.  
  6. //
  7.  
  8. public XmlDocumentationProvider(string documentPath)
  9. {
  10. if (documentPath == null)
  11. {
  12. throw new ArgumentNullException("documentPath");
  13. }
  14. var files = Directory.GetFiles(documentPath, "*.xml");
  15. foreach (var file in files)
  16. {
  17. XPathDocument xpath = new XPathDocument(Path.Combine(documentPath, file));
  18. _documentNavigators.Add(xpath.CreateNavigator());
  19. }
  20. }

  3.自定义Api列表

     这是我们第一部分主要想说的,HelpPage自带的API列表只有简单的api地址、描述等信息,非常简单,这里我们要做的是增加我们自己想要的一些个性化内容。  

  示例以增加api创建作者为目标,作者可以让查询帮助文档的人知道这个接口是谁写的,方便联系相关负责人

  

  文件:列表部分代码位于HelpPage/Views/Help/DisplayTemplates/ApiGroup.cshtml

  主旨思路:通过api接口的Description来实现我们的效果,通过断点跟踪,发现多行的注释在Documentation中是以\r\n隔开的一个字符串,这样我们就可以通过Documentation来做文章

  

我们对ApiGroup页面作如下修改  

  1. <table class="help-page-table">
  2. <thead>
  3. <tr><th>接口名称</th><th>作者</th><th>方式</th><th>接口地址</th></tr>
  4. </thead>
  5. <tbody>
  6. @foreach (var api in Model)
  7. {
  8. var apides = GetApiDesc(api.Documentation ?? "");
  9. <tr>
  10. <td class="api-documentation">
  11. <p>@apides.Desc</p>
  12. </td>
  13. <td class="api-author">
  14. <p>@apides.Author</p>
  15. </td>
  16. <td>@api.HttpMethod.Method</td>
  17. <td class="api-name"><a href="@Url.Action("Api", "Help", new { apiId = api.GetFriendlyId() })">@api.RelativePath</a></td>
  18.  
  19. </tr>
  20. }
  21. </tbody>
  22. </table>
  23.  
  24. @functions{
  25. public class apiDesc
  26. {
  27. public string Desc { get; set; }
  28. public string Author { get; set; }
  29. }
  30.  
  31. public apiDesc GetApiDesc(string oriDesc)
  32. {
  33. apiDesc result = new apiDesc();
  34.  
  35. var descArray = Regex.Split(oriDesc, "\r\n", RegexOptions.IgnoreCase);
  36. if (descArray.Length > && descArray[] != "")
  37. {
  38. List<string> descList = new List<string>();
  39. foreach (var item in descArray)
  40. {
  41. if (item.Trim().StartsWith("author"))
  42. {
  43. result.Author = item.Trim().Remove(, );
  44. }
  45. else
  46. {
  47. descList.Add(item);
  48. }
  49. }
  50. if (descArray.Count() > )
  51. result.Desc = string.Join(";", descList);
  52. }
  53. else
  54. {
  55. result.Desc = oriDesc;
  56. }
  57. if (string.IsNullOrEmpty(result.Desc))
  58. result.Desc = "无接口描述";
  59. if (string.IsNullOrEmpty(result.Author))
  60. result.Author = "无作者信息";
  61.  
  62. return result;
  63. }
  64. }

HelpPage.css修改如下:

.help-page .api-documentation {
    width: 30%;
}

.api-author {
    width: 30%;
}

注释中作者信息遵循 author:作者名(如曦昊)这个约定规则(规则可根据自己喜欢改)

启动刷新Help页面,会看到api列表页面布局改变并且最重要的是显示出了我么备注的作者信息。

这里讲解的是作者信息的添加方法,其它的可以自行发挥想象力去增加自己需要的功能效果。

二、测试工具WebApiTestClient的使用

1.安装与配置

apitest开源地址:https://github.com/yaohuang/WebApiTestClient

WebApiTestlient是一个非常好用又使用简单的 ASP.NET Web API接口测试工具

第一步:使用nuget安装( Install-Package WebApiTestClient -Version 1.1.1 )

第二步:在Api.cshtml页面添加代码  @Html.DisplayForModel("TestClientDialogs");@Html.DisplayForModel("TestClientReferences");

  1. <div id="body" class="help-page">
  2. <section class="featured">
  3. <div class="content-wrapper">
  4.  
  5. </div>
  6. </section>
  7. <section class="content-wrapper main-content clear-fix">
  8. @Html.DisplayForModel()
  9. </section>
  10. @Html.DisplayForModel("TestClientDialogs")
  11. </div>
  12. @section scripts{
  13.  
  14. @Html.DisplayForModel("TestClientReferences")
  15. }

运行程序,Help页面随便点一个接口地址进去,你会发现页面右下角有一个TestClient的按钮,点击在打开的窗口中点击“send”即可进行接口的请求操作

2.固定header参数处理

如果我们在测试接口的时候,需要为接口传固定的header信息,那我们需要在testclient弹窗中“Add Header”,然后填写header键值信息。

但如果每个接口都需要填写相同的固定header信息,我们每次都去添加是不是很麻烦?这个时候我们就会想,直接在代码中写死不就ok了,很简单啊~

是的,没错,就是这么简单,但需要注意的是,testclient使用的是knockout.js,所以不能在cshtml页面上修改,我们需要在/scripts/WebApiTestClient.js中进行修改。

文件:WebApiTestClient.js

位置:TestClientViewModel 方法中的// Initiate the Knockout bindings处

代码:addOrReplaceHeader(self.RequestHeaders, "key", "value");

修改完成,即可在每一个接口的测试时都自动加上配置的header信息

本节记录到这里,有不对的地方希望大家帮忙指正修改,感谢!

Web API使用记录系列(二)HelpPage优化与WebApiTestClient的更多相关文章

  1. Web API使用记录系列(一)创建API项目与基本配置

    本系列文章主要记录Web API使用过程中的一些个人总结,包括创建API项目.基础配置.ApiTestClient使用与HelpPage页面的优化.Owin与OAuth的使用等. 本节主要内容是API ...

  2. Web API使用记录系列(四)OAuth授权与身份校验

    呼,开干第四篇,基于OWIN搭建OAuth认证授权服务器与接口身份校验. OAuth包含授权码模式.密码模式.客户端模式和简化模式,这里我们文章记录的是密码模式和客户端模式. 目录 引用安装 授权处理 ...

  3. Web API使用记录系列(三)Web API与Owin

    还好在坚持,今天继续更新第三篇随笔----使用owin来启动WebAPI(这里还是以IIS为宿主,当然也可以使用别的如Console.Windows Server等) 关于OWIN(Open Web ...

  4. ASP.NET Web API 控制器创建过程(二)

    ASP.NET Web API 控制器创建过程(二) 前言 本来这篇随笔应该是在上周就该写出来发布的,由于身体跟不上节奏感冒发烧有心无力,这种天气感冒发烧生不如死,也真正的体会到了什么叫病来如山倒,病 ...

  5. Asp.Net Web API 2第十二课——Media Formatters媒体格式化器

    前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本教程演示如何在ASP.N ...

  6. [Web API] Web API 2 深入系列(7) Model绑定(下)

    目录 ModelBinder ModelBinderProvider 不同类型的Model绑定 简单类型 复杂类型 其他类型 ModelBinder ModelBinder是Model绑定的核心. p ...

  7. [Web API] Web API 2 深入系列(6) Model绑定(上)

    目录 解决什么问题 Model元数据解析 复杂类型 ValueProvider ValueProviderFactory 解决什么问题 Model: Action方法上的参数 Model绑定: 对Ac ...

  8. [Web API] Web API 2 深入系列(3) 激活HttpController

    目录 HttpController 创建HttpController IAssembliesResolver IHttpControllerTypeResolver HttpControllerTyp ...

  9. [Web API] Web API 2 深入系列(2) 消息管道

    目录 HttpMessageHandler Web Host模式处理过程 Self Host模式处理过程 HttpMessageHandler Web API处理管道由一系列HttpMessageHa ...

随机推荐

  1. C# 数组 随机 排序

    ]; ; i < ; i++) { arrInt[i] = i; } arrInt = arrInt.OrderBy(c => Guid.NewGuid()).ToArray<int ...

  2. JS中Unix时间戳转换日期格式

    <!doctype html> <html> <head> <title>Unix时间戳转换成日期格式</title> <script ...

  3. PHP下载APK文件

    PHP下载APK文件(代码如下) /** * //这里不要随便打印文字,否则会影响输出的文件的 * (例如下载没问题,但是apk安装时候提醒解析安装包错误) * @return array */ pu ...

  4. Jquery屏蔽浏览器的F1-F12快捷键,在IE,GOOGLE下测试均无问题

    在网上找了找,很多都是js实现的,东找西找,再加上自己的想法也勉强的完成了,直接看代码 <script type="text/javascript" src="Sc ...

  5. git学习笔记三

    1.每个分支的历史版本维护信息位置是.git/logs/refs/heads/master,这个位置的信息是文本文件,不是引用. harvey@harvey-Virtual-Machine:~/dem ...

  6. linux命令(42):wc命令

    Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式: wc [选项]文件... 2.命令功能: 统计指定文件中的字节数. ...

  7. ZOJ-3314

    CAPTCHA Time Limit: 1000 MS Memory Limit: 32768 KB 64-bit integer IO format: %lld , %llu Java class ...

  8. ES6 module语法加载 import export

    export:暴露,就是把接口暴露出去 import:引入,跟字面意思一样,引入接口 export {} export function demo(){} export var demo1; 这上面的 ...

  9. poj 3616(动态规划)

    Milking Time Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7265   Accepted: 3043 Desc ...

  10. 寻找与网页内容相关的图片(二)reddit的做法

    正如前文所述,内容聚合网站,比如新浪微博.推特.facebook等网站对于网页的缩略图是刚需.为了让分享的内容引人入胜,网页的图片缩略图是必不可少的.年轻人的聚集地.社交新闻网站reddit也是一个这 ...