Web API使用记录系列(二)HelpPage优化与WebApiTestClient

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

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

 

  本节目录

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

   页面修改

   显示备注与Model的描述信息

   自定义api列表

  测试工具WebApiTestClient的使用

   安装与配置

   固定header参数处理

 

 

  正文开始!

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

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

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中的文件地址改成第一步中配置的

  

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;  //处理泛型不显示注释问题
View Code

 

  

  ②接口返回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 
 9     public XmlDocumentationProvider(string documentPath)
10         {
11             if (documentPath == null)
12             {
13                 throw new ArgumentNullException("documentPath");
14             }
15             var files = Directory.GetFiles(documentPath, "*.xml");
16             foreach (var file in files)
17             {
18                 XPathDocument xpath = new XPathDocument(Path.Combine(documentPath, file));
19                 _documentNavigators.Add(xpath.CreateNavigator());
20             }
21         }
View Code

 

 

 

  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 > 1 && descArray[1] != "")
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(0, 7);
44                 }
45                 else
46                 {
47                     descList.Add(item);
48                 }
49             }
50             if (descArray.Count() > 0)
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 }
View Code

 

 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 }
View Code

 

运行程序,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信息

 

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

 

转载于:https://www.cnblogs.com/xihao/p/10614718.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 .NET WebAPI 中,我们可以通过多种方式接收参数。以下是其中一些常用的方式: 1. 通过 URI 中的查询字符串传递参数 我们可以使用 [FromUri] 特性来获取从 URI 中传递的参数。例如,以下代码演示了如何通过查询字符串传递参数: ```csharp public IHttpActionResult Get([FromUri] string name, [FromUri] int age) { // 处理参数 } ``` 在这个例子中,我们使用 [FromUri] 特性将 name 和 age 参数标记为从 URI 中获取。如果我们发出 GET 请求 `http://example.com/api/person?name=John&age=30`,那么 WebAPI 将正确地将 name 和 age 参数设置为 "John" 和 30。 2. 通过请求正文传递参数 我们可以使用 [FromBody] 特性将参数绑定到请求正文中的数据。例如,以下代码演示了如何使用 [FromBody] 特性传递一个自定义对象: ```csharp public IHttpActionResult Post([FromBody] Person person) { // 处理 person 对象 } ``` 在这个例子中,我们使用 [FromBody] 特性将 person 参数标记为从请求正文中获取。如果我们发送一个 POST 请求,并将以下 JSON 数据作为请求正文发送: ```json { "Name": "John", "Age": 30 } ``` 那么 WebAPI 将正确地将 person 对象设置为一个名为 "John" 年龄为 30 的 person 对象。 3. 通过请求头传递参数 我们可以使用 [FromHeader] 特性将参数绑定到请求头中的值。例如,以下代码演示了如何使用 [FromHeader] 特性传递一个字符串参数: ```csharp public IHttpActionResult Get([FromHeader] string authToken) { // 处理 authToken } ``` 在这个例子中,我们使用 [FromHeader] 特性将 authToken 参数标记为从请求头中获取。如果我们发送一个 GET 请求,并将以下请求头包含在其中: ``` authToken: 123456 ``` 那么 WebAPI 将正确地将 authToken 参数设置为 "123456"。 以上是 .NET WebAPI 中接收参数的一些常用方式,但还有其他方式可以使用。根据不同的场景和需求,我们可以使用不同的方式来接收参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值