AspNet Core Api Restful +Swagger 發佈IIS 實現微服務之旅 (二)

上一步咱們建立好CoreApijson

接下來在框架中加入 Swagger  併發布  到 IIS併發

(1)首先點擊依賴項》管理Nuget包app

(2)輸入 Swashbuckle.aspnetCore  好比:框架

圖中兩個Swagger 插件須要咱們安裝   注意:我這裏已經安裝過顯示的是 卸載ide

 (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
                });
            }
        }
    }
}
View Code

(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參數
            });
        }
View Code

(5)添加 Swagger 啓動項 在  Startup中的  Configure方法裏ui

        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();

            });
        }
View Code

(6) 在框架自動生成的 Api 控制器裏Post的方法上加入 註解(其餘方法也能夠,我只是舉例)spa

        /// <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), 201)]
        [ProducesResponseType(typeof(User), 400)]
        public void Post([FromBody]User value)
        {
        }
View Code

註解的含義以下插件

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

(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();



    }
View Code

 

OK  今天就完成了,

 

之後會描述一下 框架的基礎知識  好比  應用程序的啓動、日子、路由、靜態文件、WebSockteS  等,

等到基礎描述事後,在框架中加入一些我悶在實戰中用到的,但願你們多多指出錯誤不足之處,這是個人學習。

 

補充一下顯示結果,開始的時候忘記截圖了

 

 

有人在實踐中遇到了沒有註釋的問題

在啓動的時候

 注意這裏 XML名稱是否錯誤

代碼中讀取的註釋信息在 AspNetCoreApiSwagger.xml中,項目啓動後會把註釋信息生成到AspNetCoreApiSwagger.xml中

相關文章
相關標籤/搜索