#author("2018-12-25T12:58:24+00:00","default:admin","admin") あまりにも情報不足なのと、Microsoftからの情報提供が悪過ぎるのにムカついたので書きまくる! ---- 本サイト内関連ページ -[[ASP.NET Core/IIS]] -[[ASP.NET Core/データベース]] -[[ASP.NET Core MVC]] -[[ASP.NET Core MVC/Model]] -[[ASP.NET Core MVC/View]] -[[ASP.NET Core MVC/Controller]] -[[ASP.NET Core MVC/ルーティング]] -[[ASP.NET Core MVC/状態管理]] ---- -[[ASP.NET Core ClockUpTips:http://aspnet-core.clock-up.jp]] -[[ASP.NET Core チュートリアル:http://www.w3ii.com/ja/asp.net_core/default.html]] -[[ASP.NET MVCの用語:https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20MVC%E3%81%AE%E7%94%A8%E8%AA%9E]] -[[「いよいよ登場「ASP.NET Core 1.0」 マルチプラットフォームな.NETとは?」連載一覧:https://codezine.jp/article/corner/674]] -[[Hello World, ASP.NET Core 1.0!:https://blogs.msdn.microsoft.com/nakama/2016/07/07/aspnetcore10/]] -[[ASP.NET Core 1.0の概要を整理する:http://ryuichi111std.hatenablog.com/entry/2016/05/28/160518]] -[[ASP.NET Core - マイクロソフト系技術情報 Wiki - OSSコンソーシアム:https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20Core]] -[[.NET Core 1.1 をリリース:https://blogs.msdn.microsoft.com/visualstudio_jpn/2016/11/24/announcing-net-core-1-1/]] -[[ASP.NETからASP.NET Coreに移行した話:http://qiita.com/taiga_takahari/items/240a4b0453990db4005f]] -[[ASP.NET MVC アプリケーションを ASP.NET Core MVC にマイグレーションしようとして挫折した話:http://blog.shibayan.jp/entry/20160629/1467209826]] -[[ASP.NET Core MVC に関する投稿:http://mrgchr.hatenablog.com/archive/category/ASP.NET%20Core%20MVC]] -[[macOS ではじめる ASP.NET Core x Entity Framework Core x PostgreSQL:http://qiita.com/k--kato/items/134256c4954aa6115502]] -[[.NET Core on Linux Handson:https://www.gitbook.com/book/tanaka-takayoshi/-net-core-on-linux-handson/details]] -[[ASP.NET Core アプリを Linux サーバーで公開:https://creativeweb.jp/code/aspdotnetcore-linux]] -[[ASP.NET Core を始める際に知っておきたい Web フロントエンドツールの種類と最新トレンド:http://tkiryu.hatenablog.com/entry/2017/02/15/084115]] -[[ASP.NET Coreの雛形コードを見てみよう:https://codezine.jp/article/detail/9778]] -[[「ASP.NET Core 2.0」の変更点とインストール方法を知ろう:https://codezine.jp/article/detail/10482]] -[[ASP.NET Core Web APIのための高度なアーキテクチャ:https://www.infoq.com/jp/articles/advanced-architecture-aspnet-core]] *概要 [#n5c08179] **ASP.NETの歴史 [#x48bf873] -1996年 : Active Server Pages -2002年 : ASP.NET -2009年 : ASP.NET MVC -2016年 : ASP.NET Core **ASP.NET Core の特徴 [#ta3256cb] -オープンソースで開発されている -動作環境が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 開発ベースに移れと言われても正直キツイ(らしい) *アプリケーションの構成 [#x23bab19] -[[Application Startup in ASP.NET Core - 日本語意訳:https://qiita.com/tkiryu/items/012a0123c9eb317a0624]] -[[ASP.NET Core 1.0 の Startup クラス定義の基本と Dependency Injection の話:http://blog.shibayan.jp/entry/20160517/1463468762]] **Startupクラス [#n42b2c3e] -ASP.NET Core アプリケーションには Startup クラスが必要 -Startup クラスのコンストラクタに、dependency injection によってオブジェクトを注入することができる。例えば、 --IHostingEnvironment を注入して構成ソースを設定 --ILoggerFactory を注入してlogging プロバイダーを設定 -Startup クラスには Configure メソッドが必須で、オプションで ConfigureServices メソッドを含めることができる ***Configureメソッド(必須) [#l0c3571b] -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メソッド(オプション) [#m7f45414] -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 [#v8e347fc] -AddMvc や AddDbContext などフレームワークが提供している拡張メソッドも、実際は内部で必要なクラスをコンテナに追加しているに過ぎない -デフォルトの DI コンテナでは 3 種類存在している -AddSingleton --アプリケーション中で 1 つだけインスタンス化 -AddScoped --リクエスト中で 1 つだけインスタンス化 -AddTransient --常に新しくインスタンス化 -使いなれた DI コンテナに切り替えたい場合は、ConfigureServices メソッドで IServiceProvider を返すだけで良い? --基本的にはコンストラクタへのインジェクションのみ --IServiceProvider をコンストラクタで受けとれば、任意のインスタンスを作成できそう *日本語処理 [#m7db45b5] **文字エンコーダーの設定変更 [#n1332ae7] View に 汉语/漢語 のような文字が表示される場合はこの設定変更を検討する。 -[[ASP.Net Core + Razorで日本語がエスケープされないようにする:https://qiita.com/rei000/items/67f66fa01b87f720c92f]] --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にて日本語も許容するように設定 --[[クロスサイト スクリプティングの防止:https://docs.microsoft.com/ja-jp/aspnet/core/security/cross-site-scripting]] *バージョン [#wc64a245] **2.1 [#g89f1c5f] -2018 年 5 月 30 日に、.NET Core 2.1 と ASP.NET Core 2.1 がリリースされた -.NET Core 2.1は長期サポートリリース(LTS)になるため、古いプラットフォームの開発者はできるだけ早くアップグレードした方がよい -[[ASP.NET Core 2.1 の新機能:https://qiita.com/sugasaki/items/b6e6cd579ea205863908]] -[[.NET Core 2.1.0がリリースされました:https://kledgeb.blogspot.com/2018/06/net-core-22-net-core-210.html]] -[[.NET Core 2.1の不具合のため.NET Core 2.0が延命:https://www.infoq.com/jp/news/2018/07/net-core-2-eol]] -[[Migrate from ASP.NET Core 2.0 to 2.1:https://docs.microsoft.com/en-us/aspnet/core/migration/20_21?view=aspnetcore-2.1]] --[[ASP.NET Core 2.0 から 2.1 への移行:https://docs.microsoft.com/ja-jp/aspnet/core/migration/20_21?view=aspnetcore-2.1]] -[[ASP.NET Core 2.0 から 2.1 へのアップデートを行ったメモ:https://blog.shibayan.jp/entry/20180603/1527958208]] -[[ASP.NET Core 2.1 への移行:https://qiita.com/hiromasa-masuda/items/91976dca16f05e96410a]] -[[ASP.NET Core:daruyanagi.jp を ASP.NET Core 2.1 へ移行させた:https://blog.daruyanagi.jp/entry/2018/06/23/204520]] -[[ASP.NET Core 2.1 を IIS でホストする時にハマったメモ:https://odashinsuke.hatenablog.com/entry/2018/06/20/182129]] *2.2 [#a85462c0] -[[Announcing ASP.NET Core 2.2, available today!:https://blogs.msdn.microsoft.com/webdev/2018/12/04/asp-net-core-2-2-available-today/]] -[[ASP.NET Core 2.2 で追加された Health Checks API の基本的な使い方とカスタマイズ:https://blog.shibayan.jp/entry/20181219/1545185333]]