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), 201)]
        [ProducesResponseType(typeof(User), 400)]
        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中

 

 

出處:https://www.cnblogs.com/szlblog/p/8068311.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM