Asp.Net Core WebApi (Swagger+EF Core/Code First)


Swagger簡介:

Swagger™的目標是為REST APIs 定義一個標准的,與語言無關的接口,使人和計算機在看不到源碼或者看不到文檔或者不能通過網絡流量檢測的情況下能發現和理解各種服務的功能。當服務通過Swagger定義,消費者就能與遠程的服務互動通過少量的實現邏輯。類似於低級編程接口,Swagger去掉了調用服務時的很多猜測。 

創建一個Asp.Net Core WebApi項目。

想要使用我們的Swagger你必須有Api,所以呢我們先構造一個數據庫,當然我們可以使用DbFist,我們這里為了讓大家學習一下如何使用CodeFirst,就代碼優先吧。

這里附DbFirst的簡單用法傳送門:https://www.cnblogs.com/ZaraNet/p/10101327.html

當然你要使用DBfirst我也不攔着你,畢竟大型架構中,CodeFirst只是神經病的做法,沒有哪個傻子會這么干吧。想要使用CodeFirst,我們需要引用兩個類庫.

Install-Package Microsoft.EntityFrameworkCore

Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Tools

再之后我們就應該去創建我們的實體了,在項目中創建一個名叫Model的文件夾,定義一個Product(產品)類。

namespace WebApiSwaggerDemo.Model
{
    public class Product
    {
        [Key]
        public int ProductId { get; set; }
        [Required,MaxLength(30)]
        public string ProductName { get; set; }
    }
}

這里一個非常簡單的類就定義好了,我們CodeFirst是需要創建上下文的,我們繼續在model文件夾中創建DataContext.cs文件。

在這個類中引用using Microsoft.EntityFrameworkCore,再繼承DbContext去實現父類的構造函數。

public class DataContext :DbContext
    {
        public DataContext(DbContextOptions<DataContext> options)
            : base(options)
        {

        }
        public DbSet<Product> Products { get; set; }
    }

 創建完實體之后,我們就可以去創建我們的數據庫了,即是在middleWare中去配置,當然你也是可以在項目啟動的時候,那我們就先看看在Startup.cs中。

我們在這里分為兩種形式 1.程序啟動配置 2.中間件

 public void ConfigureServices(IServiceCollection services)
        {
            var connection = "Data Source=.;Initial Catalog=EFCore;User ID=sa;Password=sa";
            services.AddDbContext<DataContext>(options => options.UseSqlServer(connection));
       services.AddMvc(); }

在其中一定要引用using Microsoft.EntityFrameworkCore;那么這樣就沒有什么問題了,那么采用中間件模式的話,我們可以在DbContext做一些手腳。我們先看看DbContext中的定義,看看有沒有config的關鍵詞。

我們可以試着把這一堆英文翻譯一下,當然我這只是英語不好.意思就是重寫這個方法去配置上下文。

所以我們可以試着去重寫這個方法,而且這個參數相信大家都非常眼熟,也就是Builder。

 public class DataContext :DbContext
    {
        public DbSet<Product> Products { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(
                "Data Source=.;Initial Catalog=EFCore;User ID=sa;Password=sa");
        }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            //當model創建的時候 ,你可以添加一些特性
            base.OnModelCreating(modelBuilder);
            //modelBuilder.Entity<Product>().HasIndex(u => u.ProductName).IsUnique();
        }
    }

 在程序包管理器控制台輸入以下兩個命令,可以控制數據庫版本。

  • Add-Migration DbName  --add
  • update-database DbName --update

輸入完之后回車即可,我們可以發現Migrations生成了文件,其中DataContextModelSnapshot是給數據庫進行了映射,關系啊什么的。

數據庫就生成好了,這個數據庫就是記錄了這個數據庫版本什么的 ,可以說是更新日志吧。

 我們現在開始使用Swagger,如何使用呢,我們需要去安裝Swashbuckle.AspNetCore

命令:Install-Package Swashbuckle.AspNetCore    也可以直接nuget管理包頁面去安裝。

安裝部署到項目之中呢,我們需要配置Swagger中間件,在Starup中先引入。

using Swashbuckle.AspNetCore.Swagger;

首先 我們定義一個SwaggerInfo類,用於注冊的信息。

public class SwaggerInfo
    {
        public string Version { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
    }

再在Startup.ConfigureServices 中添加Swagger服務。

public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1",Description="張子浩的測試API",
                    Contact = new OpenApiContact
                    {
                        Name = "張子浩",
                        Email = string.Empty,
                        Url = new Uri("https://www.cnblogs.com/zaranet")

                    },License = new OpenApiLicense
                    {
                        Name = "許可證名字",
                        Url = new Uri("https://www.cnblogs.com/zaranet")
                    }
                }
                );
            });
        }

  最后在Startup.Configure中,啟動中間件。

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            //.....
            app.UseSwagger();
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
            });
        }    

 啟動:http://localhost:端口/swagger/index.html,以下為效果圖:

但是我們沒有發現注釋,我們應該怎么辦呢?在添加服務的時候再添加這幾行代碼:

 var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);
                var xmlPath = Path.Combine(basePath, "SwaggerDemo.xml");
                c.IncludeXmlComments(xmlPath);

重新運行,看下效果,ok~


免責聲明!

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



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