AspNet Core Api Restful +Swagger 发布IIS 实现微服务之旅 (二)
上一步我们创建好CoreApi
接下来在框架中加入 Swagger 并发布 到 IIS
(1)首先点击依赖项》管理Nuget包

(2)输入 Swashbuckle.aspnetCore 比如:

图中两个Swagger 插件需要我们安装 注意:我这里已经安装过显示的是 卸载
(3) 在框架中 添加Swagger 注解的帮助类 HttpHeaderOperation 下面是我完整的.CS文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; //添加引用
using Swashbuckle.AspNetCore.Swagger;
using Swashbuckle.AspNetCore.SwaggerGen;
using Microsoft.AspNetCore.Authorization;
namespace WebCoreApi
{
public class HttpHeaderOperation : IOperationFilter
{
/// <summary>
/// 实现接口
/// </summary>
/// <param name="operation"></param>
/// <param name="context"></param>
public void Apply(Operation operation, OperationFilterContext context)
{
if (operation.Parameters == null)
{
operation.Parameters = new List<IParameter>();
} var actionAttrs = context.ApiDescription.ActionAttributes(); var isAuthorized = actionAttrs.Any(a => a.GetType() == typeof(AuthorizeAttribute)); if (isAuthorized == false) //提供action都没有权限特性标记,检查控制器有没有
{
var controllerAttrs = context.ApiDescription.ControllerAttributes(); isAuthorized = controllerAttrs.Any(a => a.GetType() == typeof(AuthorizeAttribute));
} var isAllowAnonymous = actionAttrs.Any(a => a.GetType() == typeof(AllowAnonymousAttribute)); if (isAuthorized && isAllowAnonymous == false)
{
operation.Parameters.Add(new NonBodyParameter()
{
Name = "Authorization", //添加Authorization头部参数
In = "header",
Type = "string",
Required = false
});
}
}
}
}
(4) 添加 Swagger 的·服务方法 在 Startup中的 ConfigureServices方法里
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddSwaggerGen(x =>
{
x.SwaggerDoc("v1", new Info
{
Version = "v1", //版本号
Title = "Szl接口文档", //标题
Description = "RESTful API ",
TermsOfService = "",//服务的条件
//第一个参数Name 创建人名称/也可以是 负责人名称 第二个参数 联系邮箱
Contact = new Contact { Name = "Su", Email = "szl_0000@126.com", Url = "北京" }
}); //获取设置配置信息的 的路径对象 swagger界面配置
var basePath = PlatformServices.Default.Application.ApplicationBasePath;
var xmlPath = Path.Combine(basePath, "AspNetCoreApiSwagger.xml");
x.IncludeXmlComments(xmlPath);
x.OperationFilter<HttpHeaderOperation>(); // 添加httpHeader参数
});
}
(5)添加 Swagger 启动项 在 Startup中的 Configure方法里
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} app.UseMvc();
app.UseSwagger();
// 指定站点
app.UseSwaggerUI(x =>
{
//做出一个限制信息 描述
x.SwaggerEndpoint("/swagger/v1/swagger.json", "TwBusManagement API V1");
//显示在发出请求时发送的标题
x.ShowRequestHeaders(); });
}
(6) 在框架自动生成的 Api 控制器里Post的方法上加入 注解(其他方法也可以,我只是举例)
/// <summary>
/// AspNet Core Post请求
/// </summary>
/// <param name="value">User类</param>
/// <remarks>
///访问参数
/// POST
/// {
/// "value": "0e7ad584-7788-4ab1-95a6-ca0a5b444cbb",
/// }
///
/// </remarks>
/// <response code="201">返回新创建项</response>
/// <response code="400">如果为空时</response> [HttpPost]
[ProducesResponseType(typeof(User), )]
[ProducesResponseType(typeof(User), )]
public void Post([FromBody]User value)
{
}
注解的含义如下
summary 用来描述 方法的作用
remarks 用来描述传入的参数格式/也可以把调用的值放入里面
response 定义两个返回状态
User 类
/// <summary>
/// 用户类
/// </summary>
public class User
{
/// <summary>
/// 用户ID
/// </summary>
public int UserID { get; set; }
/// <summary>
/// 用户名称
/// </summary>
public int UserName { get; set; }
/// <summary>
/// 用户年龄
/// </summary>
public int UserAge { get; set; }
}
(7)在框架中 添加 AspNetCoreApiSwagger.xml 文件 一定要注意的是 xml 文件必须定义一个根节点 不然会报错 ,XML的属性 改为 始终复制 (XML文件在 第四步骤中有用到)


(8)设置 项目的生成 输出路径

(9) 发布 以文件夹发布就行

(10)部署IIS 说一下注意点 改成无托管代码

(11)打开IIS服务 中的模块

(12)查看是否有 AspNetCoreModule 没有进行安装 我是在国外的网站下载的

(13) 如果在运行部署的API 发生了错误
我们在 Program 中加入 如代码所示 可以帮助我们准确定义的问题所在
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
} public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
//发布程序出现错误帮助定位详细错误信息
// .UseKestrel()
//.UseContentRoot(Directory.GetCurrentDirectory())
//.UseSetting("detailedErrors", "true")
//.UseIISIntegration() .CaptureStartupErrors(true)
.UseStartup<Startup>()
.Build(); }
OK 今天就完成了,
以后会描述一下 框架的基础知识 比如 应用程序的启动、日子、路由、静态文件、WebSockteS 等,
等到基础描述过后,在框架中加入一些我闷在实战中用到的,希望大家多多指出错误不足之处,这是我的学习。
补充一下显示结果,开始的时候忘记截图了

有人在实践中遇到了没有注释的问题
在启动的时候
注意这里 XML名称是否错误

代码中读取的注释信息在 AspNetCoreApiSwagger.xml中,项目启动后会把注释信息生成到AspNetCoreApiSwagger.xml中
AspNet Core Api Restful +Swagger 发布IIS 实现微服务之旅 (二)的更多相关文章
- AspNet Core Api Restful +Swagger 发布IIS
上一步我们创建好CoreApi 接下来在框架中加入 Swagger 并发布 到 IIS (1)首先点击依赖项>管理Nuget包 (2)输入 Swashbuckle.aspnetCore 比 ...
- AspNet Core Api Restful +Swagger 实现微服务之旅 (三)
(1) 访问Rest ful接口时 Token验证 返回数据格式封装 (一)访问时Token验证 返回数据格式封装 1.1访问Api接口 方法 实现 1.1.1 创建访问Rest ...
- AspNet Core Api Restful +Swagger 实现微服务之旅(四)
这几天没更新,项目框架也是在发展阶段,这几天学习配置了一遍Apollo和RabbitMQ 等到放到框架上之后我整理一下到时候把心得写出来相互学习. 接着上一篇的内容 (2) 程序错误时 返回数据格 ...
- AspNet Core Api Restful 实现微服务之旅 (一)
(一)了解微服务(二)搭建VS项目框架 (三)创建AspNet Core Api VS2017 安装包 链接:https://pan.baidu.com/s/1hsjGuJq 密码:ug59 创 ...
- Asp.Net Core Api 使用Swagger管理文档教程的安装与使用
这周因为公司的需求需要我做一个Api的程序,这周的三天时间我一直在Core Api和 framework Api之间做纠结.不知道要使用哪一个去做项目,想着想着就决定了.既然两个我都没用过那个何不来使 ...
- asp.net core Api集成Swagger
当我们通过vs创建了一个api项目后,便可以开始集成swagger了 一.Swagger集成 从“程序包管理器控制台”窗口进行安装,执行Install-Package Swashbuckle.AspN ...
- 【.net core】电商平台升级之微服务架构应用实战
一.前言 这篇文章本来是继续分享IdentityServer4 的相关文章,由于之前有博友问我关于微服务相关的问题,我就先跳过IdentityServer4的分享,进行微服务相关的技术学习和分享.微服 ...
- centos7下docker发布第一个微服务应用(Eureka)
1.在windows下打包 微服务应用通过maven进行打包,在项目的pom.xml执行mvn clean package,或者直接通过idea或者eclipse进行maven打包 之上操作将在项目的 ...
- 微服务系列(二):使用 API 网关构建微服务
编者的话|本文来自 Nginx 官方博客,是微服务系列文章的第二篇,本文将探讨:微服务架构是如何影响客户端到服务端的通信,并提出一种使用 API 网关的方法. 作者介绍:Chris Richardso ...
随机推荐
- GCD Again
GCD Again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【JDK1.8】JDK1.8集合源码阅读——LinkedHashMap
一.前言 在上一篇随笔中,我们分析了HashMap的源码,里面涉及到了3个钩子函数,用来预设给子类--LinkedHashMap的调用,所以趁热打铁,今天我们来一起看一下它的源码吧. 二.Linked ...
- HTTP服务简介
第1章 HTTP服务介绍 1.1 简述用户访网站流程 a 进行域名信息的DNS解析 dig +trace 获得www.oldboyedu.com ip地址信息 b 进行与网站服务器建立连接,tc ...
- C#三大方法:虚方法、静态方法、实例方法
虚方法:使用virtual关键字定义,当子类继承父类时,可以对父类中的虚方法进行重写. 如下面代码中的类B,它继承类A,类A实现了接口I(实现了接口中的foo()方法).在类A中使用virtual将f ...
- 从成本角度看Java微服务
近年来,微服务因其良好的灵活性和伸缩性等特点备受追捧,很多公司开始采用微服务架构或将已有的单体系统改造成微服务.IBM也于近日开源了轻量级Java微服务应用服务器 Open Liberty .但是采用 ...
- thinkphp碰到的一些小问题
1. 生成的html自动被去掉换行和空格,压缩挤到一起了. 解决: 开启debug即可,在入口文件增加 define("APP_DEBUG",true); 2. 添加mysql的 ...
- Asp.Net MVC 使用 Ajax
Asp.Net MVC 使用 Ajax Ajax 简单来说Ajax是一个无需重新加载整个网页的情况下,可以更新局部页面或数据的技术(异步的发送接收数据,不会干扰当前页面). Ajax工作原理 Ajax ...
- c++ const全局对象是如何处理的
我主要是记录一个发现,目前我不能解释,先作个记录. const 只是一个 语义约束,由编译器强制实施的.使被约束的对象不能被直接访问修改. 我用 『直接』这词,因为在代码段中 ,用一个const 指针 ...
- 一致性hash算法以及其在分布式系统中的应用(转)
初始架构
- TQ2440在Ubuntu16.04上如何搭建DNW烧写环境
八月份国赛比完,原计划开始的嵌入式Linux学习一直拖到了现在:由于之前所有的开发全在Windows下进行的,对各种底层完全不清楚,刚好这段时间开始学习Linux,我就在想能不能把开发环境给迁移到Li ...