• [转]Using MVC 6 And AngularJS 2 With .NET Core


    本文转自:http://www.c-sharpcorner.com/article/using-mvc-6-and-angularjs-2-with-net-core/

    In this article,

    1. Setup Environment.
    2. Overview on ASP.NET.
    3. Start with .NET Core 1.0.
    4. Explore Initial Template (Empty).
    5. How to Add MVC6.
    6. AngularJS2.
      • Manage Client-side Dependencies.
      • Use Package Manager (NPM).
      • Use Task Runner.
      • Bootstrapping, using Type Script
    7. Build & run Application

    Setup Environment
    Prerequisites: The following prerequisites are needed.

    1. Visual Studio 2015
    2. ASP.NET Core 1.0

    Visual Studio 2015: If you already have a copy of Visual Studio 2015 installed, you may update Visual Studio 2015 with Update 3. Or Download Visual Studio Community 2015 for free.
    .NET Core Downloads:
    You may download one of these:

    1. .NET Core SDK (Software Development Kit/Command Line Interface) tools.
    2. .NET Core 1.0.0 - VS 2015 Tooling Preview 2 (Run apps with the .NET Core runtime).

    We are all set to go. Before we dive into our main topic, let’s get an overview on ASP.NET.
    Overview on ASP.NET Overview
    Let’s differentiate both.
    .NET Framework

    1. Developed and run on Windows platform only.
    2. Built on the .NET Framework runtime.
    3. Supported (MVC, Web API & SignalR) Dependency Injection (DI).
    4. MVC & Web API Controller are separated.

    .Net Core

    1. Open Source.
    2. Developed & run on Cross Platform.
    3. Built on the .NET Core runtime & also on .NET Framework.
    4. Facility of dynamic compilation.
    5. Built in Dependency Injection (DI).
    6. MVC & Web API Controller are unified, Inherited from same base class.
    7. Smart tooling (Bower, NPM, Grunt & Gulp).
    8. Command-line tools.

    Start with .NET Core 1.0
    Let’s create a new project with Visual Studio 2015 > File > New > Project.
    create a new project
    Choose empty template and click OK.
    empty template
    Visual Studio will create a new project of ASP.NET Core empty project.
     ASP.Net Core empty project
    We will now explore all initial files one by one.
    Explore Initial Template
    Those marked from Solution Explorer are going to be explored, one by one.
    solution
    First of all, we know about program.cs file. Let’s concentrate on it.
    Program.cs: Here, we have sample piece of code. Let’s get explanation.

     
    1. namespace CoreMVCAngular  
    2. {  
    3.     public class Program   
    4.     {  
    5.         public static void Main(string[] args) {  
    6.             var host = new WebHostBuilder().UseKestrel().UseContentRoot(Directory.GetCurrentDirectory()).UseIISIntegration().UseStartup < Startup > ().Build();  
    7.             host.Run();  
    8.         }  
    9.     }  
    10. }  

    .UseKestrel() : Define the Web Server. ASP.NET Core supports hosting in IIS and IIS Express.
    HTTP servers 

    1. Microsoft.AspNetCore.Server.Kestrel (cross-platform)
    2. Microsoft.AspNetCore.Server.WebListener (Windows-only)

    .UseContentRoot(Directory.GetCurrentDirectory()) : Application base path that specifies the path to the root directory of the Application. .UseIISIntegration(): For hosting in IIS and IIS Express. .UseStartup<Startup>() : Specifies the Startup class. .Build() : Build the IWebHost, which will host the app & manage incoming HTTP requests.
    Startup.cs
    This is the entry point of every .NET Core Application. It provides services, that the Application required.

     
    1. namespace CoreMVCAngular   
    2. {  
    3.     public class Startup   
    4.     {  
    5.         // This method gets called by the runtime. Use this method to add services to the container.  
    6.         // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940  
    7.         public void ConfigureServices(IServiceCollection services) {}  
    8.             // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.  
    9.         public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {}  
    10.     }  
    11. }  

    As you can see, there are two methods; one is ConfigureServices & another is Configure. In Configure method, three parameters are specified.
    IApplicationBuilder defines a class, which provides the mechanisms to configure an Application's request.
    We can add MVC (middleware) to the request pipeline by using “Use” extension method. Later, we will use it. ConfigureServices is an extension method, which is configured to use the several services.
    Project.json: This is where our Application dependencies are listed i.e by name & version. This file also manages runtime, compilation settings. Dependencies: All Application dependencies can add new dependencies, if required, intellisense will help up to include with the name & version.
    Dependencies
    After saving changes, it will automatically restore the dependencies from NuGet.
    Dependencies  

    Here, the code snippet is changed.
     
    1. "dependencies": {  
    2. "Microsoft.NETCore.App": {  
    3. "version": "1.0.0",  
    4. "type": "platform"  
    5. },  
    6. "Microsoft.AspNetCore.Diagnostics": "1.0.0",  
    7.   
    8. "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",  
    9. "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",  
    10. "Microsoft.Extensions.Logging.Console": "1.0.0",  
    11. "Microsoft.AspNetCore.Mvc": "1.0.0"  
    12. },  
    To uninstall, go to Solution explorer > right click on package > Uninstall package.
    explorer
    Tools: This section manages and lists command line tools. We can see IISIntegration.Tools is added by default, which is a tool that contains dotnet publish iis command for publishing the Application on IIS.
     
    1. "tools": {  
    2. "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"  
    3. },  
    Frameworks: As we can see, initially our app is running on the .NET Core platform by default with the runtime.
     
    1. “netcoreapp1 .0”.  
    2. "frameworks": {  
    3.     "netcoreapp1.0": {  
    4.         "imports": ["dotnet5.6", "portable-net45+win8"]  
    5.     }  
    6. },  
    Build Options: Options, which are passed to the compiler while building the Application.
     
    1. "buildOptions": {  
    2.     "emitEntryPoint": true,  
    3.     "preserveCompilationContext": true  
    4. },  
    RuntimeOptions: Manage Server garbage collection at Application runtime.
     
    1. "runtimeOptions": {  
    2.     "configProperties": {  
    3.         "System.GC.Server": true  
    4.     }  
    5. },  
    PublishOptions: This defines the file/folder to include/exclude to/from the output folder, while publishing the Application.
     
    1. "publishOptions": {  
    2.     "include": ["wwwroot", "web.config"]  
    3. },  
    Scripts: Scripts is an object type, which specifies that scripts run during building or publishing the Application.
     
    1. "scripts": {  
    2.     "postpublish": ["dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%"]  
    3. }  
    Add MVC6
    It’s time to add MVC6. In .NET Core 1.0 MVC & Web API are unified, and become a single class, which inherits from the same base class.
    Let’s add MVC Service to our Application. Open project.json to add new dependencies in it. In dependencies section, add two dependencies.
    • "Microsoft.AspNetCore.Mvc": "1.0.0",
    • "Microsoft.AspNetCore.StaticFiles": "1.0.0"
    Click Save.
    Save
    It will start restoring the packages automatically.
    packages
    Now let’s add MVC (midleware) to request pipeline in Config method at startup class.
     
    1. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {  
    2.     loggerFactory.AddConsole();  
    3.     if (env.IsDevelopment()) {  
    4.         app.UseDeveloperExceptionPage();  
    5.     }  
    6.     //app.UseStaticFiles();  
    7.     app.UseMvc(routes => {  
    8.         routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}");  
    9.     });  
    10. }  
    In ConfigureServices method, we need to add framework Service. We have added services.AddMvc();
     
    1. public void ConfigureServices(IServiceCollection services) {  
    2.     services.AddMvc();  
    3. }  
    MVC Folder Structure
    Let’s add MVC folder structure to our sample Application. We have added view files in the views folder & MVC controller in Controllers folder like old MVC Application.
    Structure
    Here, you may notice that there is a new file in the views folder “_ViewImports.cshtml”. This file is responsible for setting up the namespaces, which can be accessed by the views in the project, which was previously done by the Web.config file in the views folder.
    We are almost done. Let’s modify our view content with welcome message. Now, run the Application. You can see welcome message appears in the home page.
    welcome
    Output Output
    AngularJS2
    AngularJS2 is a modern Client end JavaScript Framework for the Application development. This JavaScript framework is totally new & written, based on TypeScript.
    We will follow the steps, given below, to learn, how we install it to our Application,
    1. Manage Client-side Dependencies
    2. Use Package Manager (NPM).
    3. Use Task Runner.
    4. Bootstrapping using Type Script.

    Client-side Dependencies: We need to add a JSON config file for Node Package Manager(NPM). Click add > New Item > Client- Side > npm Configuration File and click OK.
    Client-side Dependencies
    Open our newly added npm config file and modify the initial settings.
    Package.json

     
    1. {  
    2.     "version": "1.0.0",  
    3.     "name": "asp.net",  
    4.     "private": true,  
    5.     "Dependencies": {  
    6.         "angular2": "2.0.0-beta.9",  
    7.         "systemjs": "0.19.24",  
    8.         "es6-shim": "^0.33.3",  
    9.         "rxjs": "5.0.0-beta.2"  
    10.     },  
    11.     "devDependencies": {  
    12.         "gulp": "3.8.11",  
    13.         "gulp-concat": "2.5.2",  
    14.         "gulp-cssmin": "0.1.7",  
    15.         "gulp-uglify": "1.2.0",  
    16.         "rimraf": "2.2.8"  
    17.     }  
    18. }  

    In the dependencies section, we need to add AngularJS2 with other dependencies and they are for: 

    1. Es6-shim is a library, which provides compatibility on old environment.
    2. Rxjs provides more modular file structure in a variety of formats.
    3. SystemJS enables System.import TypeScript files directly.

    As you can see, there are two different type objects; one is dependencies, which are used for the production purposes & the other one is devDependencies for development related things, like gulp is to run different tasks.
    Click save. It will restore automatically. Here, we have all our required packages in the Dependencies section.
    Dependencies

    In this application we have added another package manager called Bower, Click add > New Item > Client- Side > Bower Configuration File then click Ok.

    Comparing with NPM,
     
    Bower:
    1. Manage html, css, js component
    2. Load minimal resources
    3. Load with flat dependencies
    NPM:
     
    1. Install dependencies recursively
    2. Load nested dependencies
    3. Manage NodeJS module
    Open the config file then add required dependencies in dependencies secction with specific version.
     
    Save the JSON file after edit, it will automatically restore that package in our project. Here you can see we have added Jquery & Bootstrap package with Bower package manager.
     
     
     
    Now, let’s add a gulp configuration file to run the task. Click Add > New Item > Client-Side. Select gulp JSON file to include.
    include
    Gulp.json
     
    1. /* 
    2. This file in the main entry point for defining Gulp tasks and using Gulp plugins. 
    3. Click here to learn more. http://go.microsoft.com/fwlink/?LinkId=518007 
    4. */  
    5. "use strict";  
    6. var gulp = require("gulp");  
    7. var root_path = {  
    8.     webroot: "./wwwroot/"  
    9. };  
    10. //library source  
    11. root_path.nmSrc = "./node_modules/";  
    12. //library destination  
    13. root_path.package_lib = root_path.webroot + "lib-npm/";  
    14. gulp.task("copy-systemjs", function() {  
    15.     return gulp.src(root_path.nmSrc + '/systemjs/dist/**/*.*', {  
    16.         base: root_path.nmSrc + '/systemjs/dist/'  
    17.     }).pipe(gulp.dest(root_path.package_lib + '/systemjs/'));  
    18. });  
    19. gulp.task("copy-angular2", function() {  
    20.     return gulp.src(root_path.nmSrc + '/angular2/bundles/**/*.js', {  
    21.         base: root_path.nmSrc + '/angular2/bundles/'  
    22.     }).pipe(gulp.dest(root_path.package_lib + '/angular2/'));  
    23. });  
    24. gulp.task("copy-es6-shim", function() {  
    25.     return gulp.src(root_path.nmSrc + '/es6-shim/es6-sh*', {  
    26.         base: root_path.nmSrc + '/es6-shim/'  
    27.     }).pipe(gulp.dest(root_path.package_lib + '/es6-shim/'));  
    28. });  
    29. gulp.task("copy-rxjs", function() {  
    30.     return gulp.src(root_path.nmSrc + '/rxjs/bundles/*.*', {  
    31.         base: root_path.nmSrc + '/rxjs/bundles/'  
    32.     }).pipe(gulp.dest(root_path.package_lib + '/rxjs/'));  
    33. });  
    34. gulp.task("copy-all", ["copy-rxjs", 'copy-angular2', 'copy-systemjs', 'copy-es6-shim']);  

    To run the task, right click on Gulp.json file to reload.
    Gulp.json
    Right click on copy-all & click run.
    Run
    Task run & finish.
    Task run

    In Solution Explorer, all the required packages are copied. We also need to put the type definitions for es6-shim(typing folder), without this, it will cause error - "Cannot find name 'Promise'".
     

    Bootstrapping with TypeScript TypeScript
    tsConfig.json

     
    1. {  
    2.     "compilerOptions": {  
    3.         "noImplicitAny": false,  
    4.         "noEmitOnError": true,  
    5.         "removeComments": false,  
    6.         "sourceMap": true,  
    7.         "target": "es5",  
    8.         //add this to compile app component  
    9.         "emitDecoratorMetadata": true,  
    10.         "experimentalDecorators": true,  
    11.         "module": "system",  
    12.         "moduleResolution": "node"  
    13.     },  
    14.     "exclude": ["node_modules", "wwwroot/lib"]  
    15. }  

    noImplicitAny : Raise an error on the expressions and declarations with an implied ‘any’ type. noEmitOnError: Do not emit outputs, if any errors were reported. Target : Specify ECMAScript target version: ‘es5’ (default), ‘es5’, or ‘es6’. experimentalDecorators : Enables an experimental support for ES7 decorators.
    Get more details on Compiler option here.
    Create an app folder for .ts file in wwwroot folder.
     app folder
    In Solution Explorer, you may add the files, given below.
    solution explorer
    In main.ts code snippet, bootstrap AngularJS with importing the component.

     
    1. import {bootstrap} from 'angular2/platform/browser';  
    2. import {AppComponent} from './app.component';  
    3. import {enableProdMode} from 'angular2/core';  
    4.   
    5. enableProdMode();  
    6. bootstrap(AppComponent);  

    Component: imports the Component function from Angular 2 library; use of import, app component class can be imported from other component. import {Component} from 'angular2/core';

     
    1. @Component({  
    2.     selector: 'core-app',  
    3.     template: '<h3>Welcome to .NET Core 1.0 + MVC6 + Angular 2</h3>'  
    4. })  
    5. export class AppComponent {}  

    MVC View: It’s time to update our layout & linkup the library.
    layout
    Now, we will add the reference to our layout page.

     
    1. <!DOCTYPE html>  
    2. <html>  
    3.   
    4. <head>  
    5.     <meta name="viewport" content="width=device-width" />  
    6.     <title>@ViewBag.Title</title>  
    7.     <script src="~/lib-npm/es6-shim/es6-shim.js"></script>  
    8.     <script src="~/lib-npm/angular2/angular2-polyfills.js"></script>  
    9.     <script src="~/lib-npm/systemjs/system.src.js"></script>  
    10.     <script src="~/lib-npm/rxjs/Rx.js"></script>  
    11.     <script src="~/lib-npm/angular2/angular2.js"></script>  
    12. </head>  
    13.   
    14. <body>  
    15.     <div> @RenderBody() </div> @RenderSection("scripts", required: false) </body>  
    16.   
    17. </html> Index.cshtml @{ ViewData["Title"] = "Home Page"; }  
    18. <core-app>  
    19.     <div>  
    20.         <p><img src="~/img/ajax_small.gif" /> Please wait ...</p>  
    21.     </div>  
    22. </core-app> @section Scripts {  
    23. <script>  
    24.     System.config({  
    25.         packages: {  
    26.             'app': {  
    27.                 defaultExtension: 'js'  
    28.             }  
    29.         },  
    30.     });  
    31.     System.import('app/main').then(null, console.error.bind(console));  
    32. </script> }  

    One more thing to do is to enable the static file serving. Add this line to startup config method.
    app.UseStaticFiles();
    Build & run application
    Finally, build & run the Application.
    application
    Output
    Here, we can see our app is working with AngularJS2.
    Output 

     
  • 相关阅读:
    防御式编程
    Linux磁盘与文件系统管理
    更加抽象
    高质量的子程序
    Linux文件与目录管理
    抽象
    可以工作的类
    Linux的文件权限与目录配置
    条件、循环和其他语句
    软件构建中的设计
  • 原文地址:https://www.cnblogs.com/freeliver54/p/6780688.html
Copyright © 2020-2023  润新知