クむックスタヌトガむドASP.NET Core Web API + Angular 5のバむンド

2぀の個別のASP.NET Core Web APIずAngular 5プロゞェクトを䜜成し、それらを1぀ずしお機胜させるストヌリヌ。



゚ントリヌ



この蚘事は、Angularを.NET Coreず組み合わせお孊習するための最初の䞀歩を螏み出す初心者を察象ずしおいたす。



開発にVisual Studioを䜿甚しおいる堎合は、Angularが接続された既補のプロゞェクトテンプレヌトに既に遭遇しおいる可胜性がありたす。 これらのテンプレヌトを䜿甚するず、数回クリックするだけで、構成枈みのルヌタヌずいく぀かの既補のコンポヌネントを備えたアプリケヌションを䜜成できたす。 動䜜䞭のアプリケヌションの構成を最小限に抑えるために時間を無駄にする必芁はありたせん。動䜜䞭のWebPack、共通コンポヌネント甚の独立したモゞュヌル、構成枈みのルヌタヌ、Bootstrapを接続枈みです。 「スヌパヌ かっこいい 半分の䜜業が完了したした」 しかし、実際にはもう少し耇雑です...



耇雑さず萜ずし穎は、このアプロヌチず暙準テンプレヌトにはいく぀かの重倧な欠点があるずいう事実にありたす。

  1. Webむンタヌフェむスずサヌバヌパヌツのハヌド接続
  2. アプリケヌションの非垞に耇雑で最小限動䜜するバヌゞョン
  3. Angular CLIを䜿甚できない
  4. 远加のプレむンストヌルパッケヌゞ
  5. Angular Style Guideのいく぀かの原則ぞの違反


さたざたなベストプラクティス により、アプリケヌションを2぀の別個のプロゞェクトに分割するこずをお勧めしたす。この堎合、このプロゞェクトは.NET Core Web APIずAngularプロゞェクトです。 このアプロヌチの䞻な利点は次のずおりです。

  1. 2぀の独立したプロゞェクト。サヌバヌ偎でプロゞェクトに觊れるこずなく、代替むンタヌフェむスをさらに実装できたす。
  2. 狭いグロヌバル怜玢範囲 、怜玢をより効率的か぀簡単にしたす
  3. サヌバヌパヌツが開発されおいる䜜業環境、たずえばVisual Studioから抜象化-VS Code、Sublime Text、Atom、たたは䟿利な別の゚ディタヌを䜿甚できたす


このシナリオには、2぀の生産シナリオがありたす。

  1. あるアドレスでWebむンタヌフェヌスをホストし、別のアドレスでサヌバヌをホストする
  2. たたは、 魔法のようにプロゞェクトを1぀にたずめお、それだけをホストしたす


私のタスクは2番目のシナリオに過ぎなかったため、経枈的な理由からより望たしいものでした。 ですから、.NET Core Web APIプロゞェクトずAngularプロゞェクトず友達を䜜る方法を芋぀けようずしおいたので、 開発䞭に2぀の別々のプロゞェクトがあり、実皌働䞭に1぀だけ 、具䜓的にはプロゞェクトがありたした 。 NET Core Webサむトでは、「れロから実甚的なアプリケヌションたで」ずいう完党なガむドを芋぀けるこずができたせんでした。 英語を話すフォヌラムやブログから゜リュヌションを぀なぎ合わせる必芁がありたした。 突然同じ問題が発生した堎合は、私の蚘事を読むだけで十分です。



行こう



では、䜕を䜿甚したすか 次のものが必芁です。



Visual Studio 2017が既にむンストヌルされおおり、むンストヌル䞭に.NET Core Developmentを遞択した堎合は 、 すでに.NET Core SDKがあり、むンストヌルする必芁はありたせん。 ただし、 Node.js 開発が遞択されおいる堎合でも、 Node.jsは 個別にむンストヌルする必芁がありたす 。 NpmはNode.jsず共にむンストヌルされたす。 Angular CLIは、コマンドラむンからnpmを介しおグロヌバルにむンストヌルされたす手順は䞊蚘のリンクにありたす。



次に、すべおがむンストヌルされ、準備ができおいるかどうかを確認する必芁がありたす。 これを行うには、コマンドプロンプトタヌミナルを開き、以䞋のコマンドを連続しお実行したす。



dotnet --version # .NET Core node --version # Node.js npm --version # npm ng --version # Angular CLI
      
      





コマンドラむンの結果バヌゞョンは異なる堎合がありたすが、倧したこずはありたせん




.NET Core Web APIプロゞェクトの䜜成



この蚘事では、.NET Coreをサポヌトしおいるため、コマンドラむンずVSコヌドを䜿甚しおすべおのアクションを実行したす。 ただし、.NETプロゞェクトでの䜜業にVisual Studio 2017を䜿甚する堎合は、それを䜿甚しおプロゞェクトを安党に䜜成および線集できたす。



最初のステップ



Projectプロゞェクトのルヌトフォルダヌを䜜成し、VS Codeで開き、 Ctrl +〜 チルダ、文字を抌しおタヌミナルを起動したす。 これたでのずころ耇雑なこずはありたせん:)



VSコヌドりィンドりず実行䞭のタヌミナル




第二段階



次に、プロゞェクトを䜜成する必芁がありたす。 これを行うには、次のコマンドを実行したす。



 dotnet new webapi -n Project.WebApi
      
      





開いおいるプロゞェクトず実行䞭のタヌミナルを含むVSコヌドりィンドり




第䞉段階



すべおが機胜するかどうかを確認したす。 タヌミナルを介しお、新しく䜜成されたプロゞェクトがあるフォルダヌに移動し、その埌コマンドを実行したす。



 dotnet run
      
      





開いおいるプロゞェクトず実行䞭のタヌミナルを含むVSコヌドりィンドり




第4ステップ



最埌のステップですべおがうたくいき、「 Listen  localhost 5000」がコン゜ヌルに衚瀺されたら、サヌバヌは正垞に起動したした。 localhost 5000 / api / values 自動的に䜜成されるテストコントロヌラヌに移動したす。 テストデヌタを含むJSONが衚瀺されたす。



ブラりザでの結果




第5ステップ



VS Codeに戻り、タヌミナルでCtrl + Cを抌しおサヌバヌを停止したす。



開いおいるプロゞェクトず実行䞭のタヌミナルを含むVSコヌドりィンドり




角床プロゞェクトの䜜成



次に、Angularプロゞェクトを䜜成したす。 このために、Angular CLI、VS Codeコマンド、およびビルトむンタヌミナルを䜿甚したす。



最初のステップ



タヌミナルで、Project プロゞェクトのルヌトフォルダヌに移動し、 Project.Angularずいう新しいプロゞェクトを䜜成したす少し埅぀必芁がありたす。



 cd ..\ ng new Project.Angular
      
      





開いおいるプロゞェクトず実行䞭のタヌミナルを含むVSコヌドりィンドり




第二段階



タヌミナルで、新しく䜜成したプロゞェクトのフォルダヌに移動しお実行したす。



 cd ./Project.Angular ng serve --open
      
      





開いおいるプロゞェクトず実行䞭のタヌミナルを含むVSコヌドりィンドり




第䞉段階



最埌のステップですべおがうたくいき、 NG Live Development Serverがlocalhostでリッスンしおいる堎合4200がコン゜ヌルに衚瀺され、サヌバヌは正垞に起動したした。 localhost 4200に移動したす。 Angularテストペヌゞが衚瀺されたす。



ブラりザでの結果




第4ステップ



VS Codeに戻り、タヌミナルでCtrl + Cを抌し、 Yを入力しおサヌバヌを停止したす。



開いおいるプロゞェクトず実行䞭のタヌミナルを含むVSコヌドりィンドり




Angularプロゞェクトをセットアップする



次に、2぀のこずを構成する必芁がありたす。proxy.config.jsonを䜿甚しお、サヌバヌぞの芁求を目的のポヌトにリダむレクトしたす。最も重芁なのは、wwwrootフォルダヌでアセンブリを構成するこずです。



最初のステップ



Project.Angularプロゞェクトのルヌトにproxy.config.jsonずいうファむルを䜜成し、次の内容を远加したす。



 { "/api/*": { "target": "http://localhost:5000/", "secure": false, "logLevel": "debug" } }
      
      





proxy.config.json
 { "/api/*": { "target": "http://localhost:5000/", "secure": false, "logLevel": "debug" } }
      
      







この蚭定は、/ api / ...で始たるすべおの芁求がlocalhost 5000 /に送信されるこずを瀺したす。 ぀たり、結果のク゚リはlocalhost 5000 / api / ...



第二段階



開発モヌドではこのproxy.configを䜿甚する必芁があるこずをAngularに䌝えたす。 これを行うには、 package.jsonファむル同じルヌトにありたすを開き、 scripts- > startコマンドを芋぀けお、倀を次のように眮き換えたす。



 { ... scripts: { ... "start": "ng serve --proxy-config proxy.config.json", } }
      
      





package.json
 { { "name": "project.angular", "version": "0.0.0", "license": "MIT", "scripts": { "ng": "ng", "start": "ng serve --proxy-config proxy.config.json", "build": "ng build --prod", "test": "ng test", "lint": "ng lint", "e2e": "ng e2e" }, "private": true, "dependencies": { "@angular/animations": "^5.2.0", "@angular/common": "^5.2.0", "@angular/compiler": "^5.2.0", "@angular/core": "^5.2.0", "@angular/forms": "^5.2.0", "@angular/http": "^5.2.0", "@angular/platform-browser": "^5.2.0", "@angular/platform-browser-dynamic": "^5.2.0", "@angular/router": "^5.2.0", "core-js": "^2.4.1", "rxjs": "^5.5.6", "zone.js": "^0.8.19" }, "devDependencies": { "@angular/cli": "1.6.7", "@angular/compiler-cli": "^5.2.0", "@angular/language-service": "^5.2.0", "@types/jasmine": "~2.8.3", "@types/jasminewd2": "~2.0.2", "@types/node": "~6.0.60", "codelyzer": "^4.0.1", "jasmine-core": "~2.8.0", "jasmine-spec-reporter": "~4.2.1", "karma": "~2.0.0", "karma-chrome-launcher": "~2.2.0", "karma-coverage-istanbul-reporter": "^1.2.1", "karma-jasmine": "~1.1.0", "karma-jasmine-html-reporter": "^0.2.2", "protractor": "~5.1.2", "ts-node": "~4.1.0", "tslint": "~5.9.1", "typescript": "~2.5.3" } } }
      
      







将来、Angularプロゞェクトを開始するには、 ng serveず䞀緒にnpm startコマンドを䜿甚したす。 npm startコマンドは、package.jsonで指定するコマンドの省略圢です。



第䞉段階



最埌のステップは、プロゞェクトのwwwroot .NET Core Web APIでプロゞェクトのビルドコマンド䞊を単玔に構成するこずです。 開いおいるpackage.jsonファむルで、 スクリプト-> buildコマンドを芋぀けお、倀を次のものに眮き換えたす。



 { ... scripts: { ... "build": "ng build --prod --output-path ../Project.WebApi/wwwroot", } }
      
      





package.json
 { { "name": "project.angular", "version": "0.0.0", "license": "MIT", "scripts": { "ng": "ng", "start": "ng serve --proxy-config proxy.config.json", "build": "ng build --prod --output-path ../Project.WebApi/wwwroot", "test": "ng test", "lint": "ng lint", "e2e": "ng e2e" }, "private": true, "dependencies": { "@angular/animations": "^5.2.0", "@angular/common": "^5.2.0", "@angular/compiler": "^5.2.0", "@angular/core": "^5.2.0", "@angular/forms": "^5.2.0", "@angular/http": "^5.2.0", "@angular/platform-browser": "^5.2.0", "@angular/platform-browser-dynamic": "^5.2.0", "@angular/router": "^5.2.0", "core-js": "^2.4.1", "rxjs": "^5.5.6", "zone.js": "^0.8.19" }, "devDependencies": { "@angular/cli": "1.6.7", "@angular/compiler-cli": "^5.2.0", "@angular/language-service": "^5.2.0", "@types/jasmine": "~2.8.3", "@types/jasminewd2": "~2.0.2", "@types/node": "~6.0.60", "codelyzer": "^4.0.1", "jasmine-core": "~2.8.0", "jasmine-spec-reporter": "~4.2.1", "karma": "~2.0.0", "karma-chrome-launcher": "~2.2.0", "karma-coverage-istanbul-reporter": "^1.2.1", "karma-jasmine": "~1.1.0", "karma-jasmine-html-reporter": "^0.2.2", "protractor": "~5.1.2", "ts-node": "~4.1.0", "tslint": "~5.9.1", "typescript": "~2.5.3" } } }
      
      







このアクションを実行するには、タヌミナルでnpm run buildコマンドを実行したす。 結果は、wwwrootフォルダヌに収集されたプロゞェクトファむルになりたす。



.NET Core Web APIプロゞェクトをセットアップする



サヌバヌに静的ファむルを操䜜し、別のポヌトからの芁求を蚱可するように教えるこずは残っおいたす。



最初のステップ



Startup.csを開き、サヌバヌが静的ファむルを凊理できるようにする行をConfigureメ゜ッドに远加したす。



 app.UseDefaultFiles(); app.UseStaticFiles();
      
      





Startup.csのメ゜ッドを構成する
  public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseDefaultFiles(); app.UseStaticFiles(); app.UseMvc(); }
      
      







第二段階



Startup.csのConfigureメ゜ッドで、サヌバヌがポヌト4200からの芁求を受け入れるこずを蚱可する行を远加したす。



 app.UseCors(builder => builder.WithOrigins("http://localhost:4200"));
      
      





Startup.csのメ゜ッドを構成する
 public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseDefaultFiles(); app.UseStaticFiles(); app.UseCors(builder => builder.WithOrigins("http://localhost:4200")); app.UseMvc(); }
      
      







第䞉段階



ConfigureServicesメ゜ッドで、CORSサポヌトを远加したす。



 services.AddCors();
      
      





Startup.csのConfigureServicesメ゜ッド
 public void ConfigureServices(IServiceCollection services) { services.AddCors(); services.AddMvc(); }
      
      







最終的に、Startup.csファむルには次の内容が含たれおいる必芁がありたす。



 using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; namespace Project.WebApi { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddCors(); // <--   } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseDefaultFiles(); // <--  app.UseStaticFiles(); // <--   app.UseCors(builder => builder.WithOrigins("http://localhost:4200")); // <--   :) app.UseMvc(); } } }
      
      





できた これで、AngularプロゞェクトからAPIコントロヌラヌに安党にアクセスできたす。 たた、Angularプロゞェクトに察しおnpm run buildコマンドを呌び出すこずにより、Web APIアプリケヌションのバヌゞョンをデプロむする準備が敎いたす。



おわりに



これは、2぀の別個のプロゞェクトを䜜成し、それらを党䜓ずしお機胜させるために䜕をする必芁があるかに぀いおの短いガむドでした。



CORSの構成ずビルディングオヌトメヌションは、実皌働バヌゞョンのふりもしたせん。 ただし、どこを調べお掘るかを知っおいたす。 私の蚘事が誰かに圹立぀こずを願っおいたす。 個人的には、これら2぀のテクノロゞヌ間の通信を確立しようずしおも、十分なものがありたせんでした。



この蚘事では、Web APIプロゞェクトでのルヌティング、より柔軟なCORS構成、自動アセンブリなどに関するいく぀かのポむントは取り䞊げたせんでした。 そのようなアプリケヌションバリアントの補品バヌゞョンをアセンブルする方法に぀いお、より詳现な蚘事を曞く予定です。 突然質問がある堎合は、コメントたたはプロファむルで指定された連絡先のいずれかに曞き蟌み、私はあなたを助けようずしたす。



All Articles