net WebApi中使用swagger

net WebApi中使用swagger

我在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

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

返回消息ResultJson的Model

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

新增加一个AppController的Api

 public class AppController : ApiController
    {
        private List<App> GetApps()
        {
            List<App> list = new List<App>();
            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;
        }

        /// <summary>
        /// 获取所有APP
        /// </summary>
        /// <returns>所有APP集合</returns>
        [HttpGet]
        public HttpResponseMessage Get()
        {
            return MyJson.ObjectToJson(GetApps());
        }

        /// <summary>
        /// 获取指定APP
        /// </summary>
        /// <param name="id">需要获取APP的id</param>
        /// <returns>返回指定APP</returns>
        [HttpGet]
        public HttpResponseMessage Get(int id)
        {
            var app = GetApps().Where(m => m.Id.Equals(id)).FirstOrDefault();
            return MyJson.ObjectToJson(app);
        }

        /// <summary>
        /// 增加App信息
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        [HttpPost]
        public HttpResponseMessage Insert([FromBody]App value)
        {
            ResultJson json = new ResultJson() { Code = 200, Message = "Ok" };
            return MyJson.ObjectToJson(json);
        }

        /// <summary>
        /// 更新APP信息
        /// </summary>
        /// <param name="value">APP信息</param>
        /// <returns>更新结果</returns>
        [HttpPut]
        public HttpResponseMessage UpdateApp([FromBody]App value)
        {
            ResultJson json = new ResultJson() { Code = 200, Message = "Ok" };
            return MyJson.ObjectToJson(json);
        }

        /// <summary>
        /// 删除APP信息
        /// </summary>
        /// <param name="id">APP编号</param>
        /// <returns>删除结果</returns>
        [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<object> 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

标签: swaggerwebapiC#

时间: 2024-10-07 06:13:27

net WebApi中使用swagger的相关文章

.net WebApi中使用swagger生成WepApi集成测试工具

我在WebApi中使用swagger的时候发现会出现很多问题,搜索很多地方都没找到完全解决问题的方法,后面自己解决了,希望对于遇到同样问题朋友有帮助.我将先一步一步的演示项目中解决swagger遇到问题及解决方法. 首先我们新建一个api项目 图1 (默认生成项目) 图2(运行首页) 图3(默认Api列表) 图4(默认Get的Api) 以上图1-4都是默认情况下生成页面看起来不是那么好看,而且测试也不方便,下面将介绍怎么使用swagger. 使用nuget包获取Swashbule.swagger

ASP.NET Core 3.0 WebApi中使用Swagger生成API文档简介

参考地址,官网:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/getting-started-with-swashbuckle?view=aspnetcore-2.2&tabs=visual-studio 与https://www.jianshu.com/p/349e130e40d5 当一个WebApi完成之后,书写API文档是一件非常头疼的事,因为不仅要写得清楚,能让调用接口的人看懂,又是非常耗时耗力的一件事.在之前的一篇随笔中(

在webapi中使用swagger

1 在webapi项目下安装swagger,包名 Swashbuckle.AspNetCore 2 在webapi的startup.cs文件中添加swagger服务 /// <summary> /// 配置服务 注册服务 /// </summary> /// <param name="services"></param> public void ConfigureServices(IServiceCollection services)

ASP.NET Core 1.0 中使用 Swagger 生成文档

github:https://github.com/domaindrivendev/Ahoy 之前文章有介绍在ASP.NET WebAPI 中使用Swagger生成文档,ASP.NET Core 1.0中同样也支持. 依赖包 "dependencies": { "Swashbuckle.SwaggerGen": "6.0.0-rc1-final", "Swashbuckle.SwaggerUi": "6.0.0-rc

WebApi 文档Swagger

NET WebApi 文档Swagger中度优化 本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文地址:www.cnblogs.com/tdws 写在前面 在后台接口开发中,接口文档是必不可少的.在复杂的业务当中和多人对接的情况下,简单的接口文档又不能满足需求,试想你的单应用后台有几十个模块,几百甚至更多的接口,又有上百个ViewModel.怎么能让人用起来更顺手更明了?本篇介绍第一步的中度优化,下一篇将分享下一阶段的深度优化. 第一篇:ASP.NET WebApi 文档Swagge

ASP.NET WebApi 文档Swagger深度优化

本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明博客园蜗牛原文地址,cnblogs.com/tdws 写在前面 请原谅我这个标题党,写到了第100篇随笔,说是深度优化,其实也并没有什么深度.源码也没怎么修改,如果你想使用WebApi Swagger文档,请先移步到上一篇的中度优化. 第一篇:ASP.NET WebApi 文档Swagger中度优化 http://www.cnblogs.com/tdws/p/6100126.html 第二篇:ASP.NET WebApi 文档Swashbu

ASP.NET WebApi 文档Swagger中度优化

本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文地址:www.cnblogs.com/tdws 写在前面 在后台接口开发中,接口文档是必不可少的.在复杂的业务当中和多人对接的情况下,简单的接口文档又不能满足需求,试想你的单应用后台有几十个模块,几百甚至更多的接口,又有上百个ViewModel.怎么能让人用起来更顺手更明了?本篇介绍第一步的中度优化,下一篇将分享下一阶段的深度优化. 第一篇:ASP.NET WebApi 文档Swagger中度优化 1.上手使用 2.Controller

Asp.Net Core中使用Swagger,你不得不踩的坑

很久不来写blog了,换了新工作后很累,很忙.每天常态化加班到21点,偶尔还会到凌晨,加班很累,但这段时间,也确实学到了不少知识,今天这篇文章和大家分享一下:Asp.Net Core中使用Swagger,你不得不踩的坑. 这篇文章着重讲几点: swagger 跨层注释问题 swagger Get请求传多个参数的问题 swagger Enum 注释问题 swagger api文档版本控制 第一步:搭建一个webapi项目或者mvc项目,引入swagger nuget 我创建项目,习惯性的先创建一个

ASP.NET Core Web API中使用Swagger

本节导航 Swagger介绍 在ASP.NET CORE 中的使用swagger ??在软件开发中,管理和测试API是一件重要而富有挑战性的工作.在我之前的文章<研发团队,请管好你的API文档>也专门阐述了通过文档管理工具,来保证API文档和代码的一致性,这样更加有助于团队的协作. ??以往我们总是通过第三方平台工具来管理我们的API文档,如eolinker.在测试方面,我们也会依赖fiddler,PostMan这样的工具. ??Swagger兼具了API文档管理和测试的功能,而且保证了代码和