博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.net WebApi中使用swagger
阅读量:5808 次
发布时间:2019-06-18

本文共 5811 字,大约阅读时间需要 19 分钟。

 

  我在WebApi中使用swagger的时候发现会出现很多问题,搜索很多地方都没找到完全解决问题的方法,后面自己解决了,希望对于遇到同样问题朋友有帮助。我将先一步一步的演示项目中解决swagger遇到问题及解决方法。

  首先我们新建一个api项目

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

图1 (默认生成项目)

图2(运行首页)

 

 

图3(默认Api列表)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

图4(默认Get的Api)

 

 以上图1-4都是默认情况下生成页面看起来不是那么好看,而且测试也不方便,下面将介绍怎么使用swagger。

   使用nuget包获取Swashbule、swagger的包并安装。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

图5(Swashbule - swagger for Api)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

图6(swagger UI for net)

一般安装到就应该可以正常运行了。但是运行后我们发现抛出异常

图7(异常1)

打开解决方案属性-->生成,勾选XML文档文件,保存就ok。

图8

图9(异常2)

出现该异常是由于没有增加依赖项,大家可以自行查看自己的dll文件版本,做出修改,把下面的代码插入到web.config中。

1
2
3
4
5
6
7
8
9
10
11
12
<dependentAssembly>
    
<assemblyIdentity name=
"System.Net.Http.Formatting" 
publicKeyToken=
"31bf3856ad364e35" 
culture=
"neutral" 
/>
    
<bindingRedirect oldVersion=
"0.0.0.0-5.0.0.0" 
newVersion=
"5.0.0.0" 
/>
  
</dependentAssembly>
  
<dependentAssembly>
    
<assemblyIdentity name=
"System.Web.Http" 
publicKeyToken=
"31bf3856ad364e35" 
culture=
"neutral" 
/>
    
<bindingRedirect oldVersion=
"0.0.0.0-5.0.0.0" 
newVersion=
"5.0.0.0" 
/>
  
</dependentAssembly>
  
<dependentAssembly>
    
<assemblyIdentity name=
"Newtonsoft.Json" 
publicKeyToken=
"30ad4fe6b2a6aeed" 
culture=
"neutral" 
/>
    
<bindingRedirect oldVersion=
"0.0.0.0-8.0.0.0" 
newVersion=
"8.0.0.0" 
/>
  
</dependentAssembly>

在把swagger.net中两行代码注释,估计是因为nuget包中的代码没有更新导致这个异常出现

图10(注释不需要代码)

好了现在我们来看看可以运行后的效果,在浏览器中输入URL:http://localhost:28129/swagger会自动跳转到http://localhost:28129/swagger/ui/index

图11

至此我们就能够正常运行swagger非常方便调试接口。

为了方便测试我们新建一个App的Model

///     /// App信息    ///     public class App    {        ///         /// App的ID号        ///         public int Id { get; set; }        ///         /// App的名称        ///         public string Name { get; set; }        ///         /// App的说明        ///         public string Remark { get; set; }    }

返回消息ResultJson的Model

///     /// 返回处理结果    ///     public class ResultJson    {        ///         /// 返回代码        ///         public int Code { get; set; }        ///         /// 返回消息        ///         public string Message { get; set; }    }

新增加一个AppController的Api

public class AppController : ApiController    {        private List
GetApps() { List
list = new List
(); list.Add(new App() { Id = 1, Name = "WeChat", Remark = "WeChat" }); list.Add(new App() { Id = 2, Name = "FaceBook", Remark = "FaceBook" }); list.Add(new App() { Id = 3, Name = "Google", Remark = "Google" }); list.Add(new App() { Id = 4, Name = "QQ", Remark = "QQ" }); return list; } ///
/// 获取所有APP /// ///
所有APP集合
[HttpGet] public HttpResponseMessage Get() { return MyJson.ObjectToJson(GetApps()); } ///
/// 获取指定APP /// ///
需要获取APP的id ///
返回指定APP
[HttpGet] public HttpResponseMessage Get(int id) { var app = GetApps().Where(m => m.Id.Equals(id)).FirstOrDefault(); return MyJson.ObjectToJson(app); } ///
/// 增加App信息 /// ///
///
[HttpPost] public HttpResponseMessage Insert([FromBody]App value) { ResultJson json = new ResultJson() { Code = 200, Message = "Ok" }; return MyJson.ObjectToJson(json); } ///
/// 更新APP信息 /// ///
APP信息 ///
更新结果
[HttpPut] public HttpResponseMessage UpdateApp([FromBody]App value) { ResultJson json = new ResultJson() { Code = 200, Message = "Ok" }; return MyJson.ObjectToJson(json); } ///
/// 删除APP信息 /// ///
APP编号 ///
删除结果
[HttpDelete] public HttpResponseMessage DeleteApp(int id) { ResultJson json = new ResultJson() { Code = 200, Message = "Ok" }; return MyJson.ObjectToJson(json); } }

为了满足使用中需要用到Json格式数据,提出一个类

public class MyJson    {        public static HttpResponseMessage ObjectToJson(object obj)        {            JavaScriptSerializer js = new JavaScriptSerializer();            string r = js.Serialize(obj);            var result = new HttpResponseMessage(HttpStatusCode.OK)            {                Content = new StringContent(r, Encoding.UTF8, "text/json")            };            return result;        }        public static HttpResponseMessage ObjectToJson(List objs)        {            JavaScriptSerializer js = new JavaScriptSerializer();            string r = js.Serialize(objs);            var result = new HttpResponseMessage(HttpStatusCode.OK)            {                Content = new StringContent(r, Encoding.UTF8, "text/json")            };            return result;        }    }

好了我们运行后可以看看效果

图12

点击 Try it out

 

图13

我们还可以将注释打开,我们就可以在页面里面看到注释,方便调试接口时候调用人了解各参数信息。打开

public class SwaggerConfig{    public static void Register()     {            var thisAssembly = typeof(SwaggerConfig).Assembly;            GlobalConfiguration.Configuration                 .EnableSwagger(c =>                    {                        c.SingleApiVersion("v1", "SwaggerApiDemo");                        c.IncludeXmlComments(GetXmlCommentsPath());                    })                .EnableSwaggerUi(c =>                    {                                });        }                private static string GetXmlCommentsPath()        {            return string.Format("{0}/bin/SwaggerApiDemo.XML", System.AppDomain.CurrentDomain.BaseDirectory);        }}

上面标记颜色为新增加内容,好了我们来看看最终效果

 

图14

图15

我们可以看到注释部分了,这样我们的swagger就完成了。

我把最终的代码发到此处,有需要代码的时候朋友可以直接下载。

http://pan.baidu.com/s/1mhFVZ4W

转载于:https://www.cnblogs.com/duanweishi/p/9410413.html

你可能感兴趣的文章
Linux基础命令---rmdir
查看>>
优秀程序员共有的7种优秀编程习惯
查看>>
iOS sqlite3(数据库)
查看>>
粤出"飞龙",打造新制造广东样本
查看>>
编玩边学获数千万元A轮融资,投资方为君联资本
查看>>
开发者论坛一周精粹(第五十五期) 全站HTTPS之OSS教程 一次可以备案几个网站?...
查看>>
蓝图(Blueprint)详解
查看>>
Spark之SQL解析(源码阅读十)
查看>>
Android图片添加水印图片并把图片保存到文件存储
查看>>
C#字符串的不变性
查看>>
前端路由简介以及vue-router实现原理
查看>>
比特币系统采用的公钥密码学方案和ECDSA签名算法介绍——第二部分:代码实现(C语言)...
查看>>
分享15款很实用的 Sass 和 Compass 工具
查看>>
AMD优势: 与众不同 选择丰富
查看>>
玩转高性能超猛防火墙nf-HiPAC
查看>>
简单按日期查询mysql某张表中的记录数
查看>>
自动化部署之jenkins发布PHP项目
查看>>
C/C++编程可用的Linux自带工具
查看>>
如何判断webview是不是滑到底部
查看>>
海贼王十大悲催人物
查看>>