あまりにも情報不足なのと、Microsoftからの情報提供が悪過ぎるのにムカついたので書きまくる!


本サイト内関連ページ


概要

ASP.NETの歴史

  • 1996年 : Active Server Pages
  • 2002年 : ASP.NET
  • 2009年 : ASP.NET MVC
  • 2016年 : ASP.NET Core

ASP.NET Core の特徴

  • オープンソースで開発されている
  • 動作環境がWindowsに加えMacとLinuxに正式に対応した
  • これまで個別の機能であった「ASP.NET MVC」「WebAPI」「WebPages?」は、ASP.NET Coreで再設計され、1つに統合された
  • Linux/Mac/Windows共通で使用できるコマンドラインインターフェース「.NET CLI」が用意された。このコマンドを使用することで、リポジトリから取得してきたソースコードを、環境を意識することなく依存解決を行い、ビルドし、実行できるようになった。
  • IIS 非依存。libuvベースのKestrelという新しいWebサーバーが提供され、IISやNginxとの連携することもできる。
  • MVC/Entity Framework Core の知識を必須とするため、ASP.NET Web Forms や型付きデータセットで開発されてきた方々には、非常にハードルが高い開発プラットフォームにもなっている
  • 高水準 UI 部品が大量に存在していた ASP.NET Web Forms から、いきなりスクラッチ開発に近い ASP.NET MVC/EF 開発ベースに移れと言われても正直キツイ(らしい)

パフォーマンス

アプリケーションの構成

Startupクラス

  • ASP.NET Core アプリケーションには Startup クラスが必要
  • Startup クラスのコンストラクタに、dependency injection によってオブジェクトを注入することができる。例えば、
    • IHostingEnvironment? を注入して構成ソースを設定
    • ILoggerFactory? を注入してlogging プロバイダーを設定
  • Startup クラスには Configure メソッドが必須で、オプションで ConfigureServices? メソッドを含めることができる

Configureメソッド(必須)

  • ASP.NET Core アプリケーションが HTTP リクエストにどのように応答するかを指定するために使用される
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
        app.UseBrowserLink();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseStaticFiles();

    app.UseIdentity();

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

ConfigureServices?メソッド(オプション)

  • Configure メソッドの前に呼び出される
  • 構成オプション はこのメソッドで設定される
  • 実質的なセットアップが必要な機能のために、IServiceCollection? には Add[Service] 拡張メソッドが用意される
public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    services.AddMvc();
}

Dependency Injection

  • AddMvc?AddDbContext? などフレームワークが提供している拡張メソッドも、実際は内部で必要なクラスをコンテナに追加しているに過ぎない
  • デフォルトの DI コンテナでは 3 種類存在している
  • AddSingleton?
    • アプリケーション中で 1 つだけインスタンス化
  • AddScoped?
    • リクエスト中で 1 つだけインスタンス化
  • AddTransient?
    • 常に新しくインスタンス化
  • 使いなれた DI コンテナに切り替えたい場合は、ConfigureServices? メソッドで IServiceProvider? を返すだけで良い?
    • 基本的にはコンストラクタへのインジェクションのみ
    • IServiceProvider? をコンストラクタで受けとれば、任意のインスタンスを作成できそう

日本語処理

文字エンコーダーの設定変更

View に

&#x6C49;&#x8BED;/&#x6F22;&#x8A9E;

のような文字が表示される場合はこの設定変更を検討する。

  • ASP.Net Core + Razorで日本語がエスケープされないようにする
    • Startup.cs に以下の記述を加える
      using System.Text.Encodings.Web;
      using System.Text.Unicode;
      
      public void ConfigureServices(IServiceCollection services) {
          services.AddSingleton(HtmlEncoder.Create(UnicodeRanges.BasicLatin,
                                                   UnicodeRanges.CjkSymbolsandPunctuation,
                                                   UnicodeRanges.Hiragana, 
                                                   UnicodeRanges.Katakana,
                                                   UnicodeRanges.CjkUnifiedIdeographs));
          // その他 .AddMvc() など...
      }
    • デフォルトではHtmlEncoder?.Defaultが使われ、これがU+0000..U+007F以外は全てエスケープする設定になっている
    • なので、そこでDIにて日本語も許容するように設定

バージョン

2.1

  • 2018 年 5 月 30 日に、.NET Core 2.1 と ASP.NET Core 2.1 がリリースされた
  • .NET Core 2.1は長期サポートリリース(LTS)になるため、古いプラットフォームの開発者はできるだけ早くアップグレードした方がよい
  • 2018年10月1日を以って「.NET Core 2.0」のサポートが終了した

2.2

3.0


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-08-04 (火) 16:58:32 (58d)