WebAPI - HowardWhile/2022_note GitHub Wiki

Web API

新增Swagger(OpenAPI)可以識別的WebAPI

ref https://www.youtube.com/watch?v=llUKIGbF43Q

image-20220614114321828

image-20220614154236107

image-20220614154341654

修改APIValues的文件ValueController.cs

image-20220620152032883

[HttpGet("GetInt")]
public int GetInt()
{
    return 123;
}

[HttpGet("GetDouble")]
public double GetDouble()
{
    return 123.321;
}

Swagger(OpenAPI)的執行頁面就可以看到該API出現

image-20220620152144090

一些使用方法的筆記

ref:

https://github.com/domaindrivendev/Swashbuckle.AspNetCore

Swashbuckle.AspNetCore

https://docs.microsoft.com/zh-tw/aspnet/core/tutorials/getting-started-with-swashbuckle?view=aspnetcore-6.0&tabs=visual-studio

我想自訂API的標題和內容

主要修改AddSwaggerGen的訊息就可以達成

image-20220620161705036

//builder.Services.AddSwaggerGen();
builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo
    {
        Version = "v1",
        Title = "API測試",
        Description = "An ASP.NET Core Web API for API測試",
        TermsOfService = new Uri("https://example.com/terms"),
        Contact = new OpenApiContact
        {
            Name = "Example Contact",
            Url = new Uri("https://example.com/contact")
        },
        License = new OpenApiLicense
        {
            Name = "Example License",
            Url = new Uri("https://example.com/license")
        }
    });
});

image-20220620161751131

改變版本號後畫面不見了?

image-20220620161945489

這要修改UseSwaggerUI不然預設的路徑會是v1/swagger.json

image-20220620163628041

//app.UseSwaggerUI();
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("v2/swagger.json", "API v2");
});

想對個別API加上描述

使用summaryremarks標籤

image-20220620171851976

image-20220620172014309

/// <summary>
/// 取得整數
/// </summary>
/// <remarks>
/// 這是一個測試用的API
/// </remarks>

環境配置

  1. 啟用 XML 註解

image-20220620172134035

<PropertyGroup>
  <GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>
  1. AddSwaggerGen做一下修改讀取產生的XML註解

image-20220620181848881

var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var filePath = Path.Combine(System.AppContext.BaseDirectory, xmlFilename);
c.IncludeXmlComments(filePath);

直接運行執行檔,為什麼都看不到OpenAPI的畫面

原因在於用執行檔運行起來環境會從開發模式變成產品模式

image-20220621170257591

方法一

因API的樣板長得像這樣,使得下面這段程式不運行了,可以暫時透過註解if (api.Environment.IsDevelopment()),讓畫面跑出來。

image-20220621170800557

已經駐節了還是看不到畫面?

你被終端機的訊息陰了

把網址 https://localhost:5001 改成 https://localhost:5001/swagger/就可以了

方法二

別點exe,改成開終端機敲指令

dotnet .\<WebAPI>.dll --environment Development

方法三

...

怎麼換WebAPI的port

https://stackoverflow.com/questions/70332897/how-to-change-default-port-no-of-my-net-core-6-api

port換了以後偵錯的網頁開不會自動啟動怎麼辦

image-20221006145528340

有關帳號驗證的API設計

https://dotblogs.com.tw/wellwind/2016/11/24/jwt-auth-web-api

https://ithelp.ithome.com.tw/articles/10199102

https://ithelp.ithome.com.tw/articles/10198150

https://blog.miniasp.com/post/2022/02/13/How-to-use-JWT-token-based-auth-in-aspnet-core-60

https://ithelp.ithome.com.tw/articles/10242295

https://www.youtube.com/watch?v=v7q3pEK1EA0

https://github.com/patrickgod/JwtWebApiTutorial

ASP.net 怎麼設計提供下載檔案的WebAPI

https://stackoverflow.com/questions/45727856/how-to-download-a-file-in-asp-net-core

/// <summary>
/// 下載指定的檔案
/// </summary>
/// <remarks>
/// 下載指定的檔案
/// </remarks>
[HttpGet("MyDownload")]
public ActionResult MyDownload(string FilePath = "")
{   
	byte[] fileBytes = System.IO.File.ReadAllBytes(FilePath);    
    return File(fileBytes, "application/force-download", fileName);
}

Topshelf

https://dotblogs.com.tw/wasichris/2017/01/14/165637

Quartz.Net

⚠️ **GitHub.com Fallback** ⚠️