asp.Netcore 3.1 web api構成ノート

6721 ワード

1.web apiプロジェクトの作成


具体的にはhttps://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-web-api?view=aspnetcore-3.1&tabs=visual-studio 
 

2.インタフェース記述ドキュメントを追加


NSwagは以下の機能を提供しています.
 
C#コピー
public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext(opt =>
        opt.UseInMemoryDatabase("TodoList"));
    services.AddMvc();

    // Register the Swagger services
    services.AddSwaggerDocument();
}

 
C#コピー
public void Configure(IApplicationBuilder app)
{
    app.UseStaticFiles();

    // Register the Swagger generator and the Swagger UI middlewares
    app.UseOpenApi();
    app.UseSwaggerUi3();

    app.UseMvc();
}
  • は、Swagger UIおよびSwaggerジェネレータを使用することができる.
  • 柔軟なコード生成機能.
  • NSwag NuGetパッケージをインストールするには、次のいずれかの方法を使用します.
  • 「パッケージマネージャコンソール」ウィンドウから:
  • 「表示」>「その他のウィンドウ」>「パッケージマネージャコンソール」
  • に移動
  • は、TodoApiを含むように移動する.csprojファイルのディレクトリ
  • PowerShellレプリケーション
    Install-Package NSwag.AspNetCore
    
  • 次ステップ、ASP.NET CoreアプリケーションでのSwaggerの追加と構成:
  • Startup.ConfigureServicesメソッドでは、登録に必要なSwaggerサービス:
  • Startup.Configureメソッドでは、生成されたSwagger仕様およびSwagger UIのためのミドルウェアのサービスを有効にする:
  • .
  • アプリケーションを開始します.移動先:
  • http://localhost:/swagger、Swagger UIを表示します.
  • http://localhost:/swagger/v1/swagger.json、Swagger仕様を参照してください.


  • 3.カスタムjson形式ブラシのサポート


    コンポーネントのインストール
    Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson -Version 3.1.1
    
     services.AddControllers()
                        .AddNewtonsoftJson(opt =>
                        {//      
                            opt.SerializerSettings.ContractResolver =
                               new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
    
               // Configure a custom converter
                            opt.SerializerSettings.Converters.Add(SerializerHelper.JsonTimeConverter());
                        });
    
     public class SerializerHelper
        { 
            public static JsonConverter JsonTimeConverter()
            {
                IsoDateTimeConverter timeConverter = new IsoDateTimeConverter
                {
                    DateTimeFormat = "yyyy'-'MM'-'dd HH:mm:ss"
                };
                return timeConverter;
            }
        }

    4.処理異常

    
              app.UseExceptionHandler("/error");
    
     [Route("/error")]
            public IActionResult Error()
            {
                var context = HttpContext.Features.Get();
                Console.WriteLine("context.Error.StackTrace:" + context.Error.StackTrace);
                return Problem(
                    detail: context.Error.StackTrace,
                    title: context.Error.Message,
                    statusCode: 500);
            }

    errorでメールの送信、ログの記録、戻り状態の設定などを設定できます.

    5.ログ


    nlogの使用https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-3
    単一exeの場合、ルートディレクトリ、logパスを設定する必要があります.相対パスを設定する場合は、${basedir:processDir=true}パラメータを設定する必要があります.
               var rootPath = Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);
    #if DEBUG
                rootPath = System.AppDomain.CurrentDomain.BaseDirectory.ToString();
    #endif
                var logger = NLogBuilder.ConfigureNLog(Path.Combine(rootPath, "nlog.config")).GetCurrentClassLogger(); 
                try
                {
                    logger.Debug("init main");
                    CreateHostBuilder(args).Build().Run();
                }
                catch (Exception exception)
                {
                    //NLog: catch setup errors
                    logger.Error(exception, "Stopped program because of exception");
                    throw;
                }
                finally
                {
                    // Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
                    NLog.LogManager.Shutdown();
                }
     
        
    

    6.ローカルキャッシュと分散キャッシュ


     
    操作手順:
    1.参照を追加:
    Microsoft.Extensions.Caching.StackExchangeRedis
    2.プロファイルの変更
      "RedisDBSettings": {
        "ConnectionString": "127.0.0.1:6379,connectTimeout=500,ssl=False,abortConnect=False",
        "DatabaseName": "1",//db id
        "InstanceName": "SBCC_Survey_" //        key   ,       
      }

    3.startup拡張メソッドを追加し、構成を読み込み、注入する(実装はStackExchangeRedis)
         //redis 
                #region snippet_AddStackExchangeRedisCache
                services.AddStackExchangeRedisCache(options =>
                {
                    options.Configuration = Configuration["RedisDBSettings:ConnectionString"];
                    options.InstanceName = Configuration["RedisDBSettings:InstanceName"];
                });
                #endregion

    そして直接取得すればいいです.
      private IDistributedCache _cache;(デフォルトではバイナリがサポートされており、拡張方法でバイナリ変換が可能で、汎用性がサポートされています)
    参考になるhttps://www.cnblogs.com/OpenCoder/p/10287743.html

    分散型Redisキャッシュ


    Redisはメモリ内のデータストレージのオープンソースデータストレージであり、通常は分散キャッシュとして使用される.Redisをローカルで使用することもできるし、Azureが管理するASPを使用することもできる.NET Coreアプリケーション構成Azure Redisキャッシュ.
    アプリケーションは、Startup.ConfigureServicesの非開発環境のRedisCacheインスタンス(AddStackExchangeRedisCache)を使用してキャッシュ実装を構成します.
    C#コピー
    services.AddStackExchangeRedisCache(options =>
    {
        options.Configuration = "localhost";
        options.InstanceName = "SampleInstance";
    });
    

    ローカルコンピュータにRedisをインストールするには、次の手順に従います.
  • Chocolatey Redisパッケージをインストールします.
  • コマンドプロンプトの下でredis-server
  • を実行する.
    公式ドキュメントの紹介:
    https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/distributed?view=aspnetcore-3.1
    公式demo:https://github.com/dotnet/AspNetCore.Docs/tree/master/aspnetcore/performance/caching/distributed/samples/3.x/DistCacheSample
     

    7.mongodbデータベース操作


    todo