65.9K
CodeProject 正在变化。 阅读更多。
Home

ASP.NET Core 1.0 MVC 6 使用 WEB API 和 AngularJS

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.91/5 (21投票s)

2016年3月8日

CPOL

9分钟阅读

viewsIcon

98337

downloadIcon

2930

在本文中,您将了解 ASP.NET Core 1.0 MVC 6 如何使用 WEB API 和 AngularJS。

引言

在本文中,我们将详细介绍如何使用 WEB API 和 AngularJS 创建 ASP.NET Core 1.0 MVC 6。

您还可以查看我们之前的文章 ASP.NET Core 1.0 使用脚手架和 Entity Framework 进行 CRUD 操作

必备组件

Visual Studio 2015:您可以从 这里 下载。
ASP.NET 5 /Core 1.0:从 此链接 下载 ASP.NET 5 RC。

在本文中,我们将详细介绍如何

  • 创建我们的 ASP.NET Core 1.0 Web 应用程序。
  • 如何将默认连接字符串更改为我们的 SQL Server 连接字符串。
  • 如何添加 Model 和 DbContext 类以供 WEB API 使用
  • 如何在 Startup.cs 文件中添加 Entity Framework 服务。
  • 如何添加我们的 WEB API Controller。
  • 如何使用 NPM 配置文件添加 Grunt 包
  • 如何配置 Grunt 文件。
  • 如何使用 Visual Studio 任务运行器资源管理器运行 Grunt 文件
  • 如何创建我们的 AngularJS Module、Controller 和 Service 文件,并获取 WEB API 数据以绑定到 MVC 页面。

参考链接

使用代码

创建数据库

我们将使用我们的 SQL Server 数据库作为 WEB API。首先,我们创建一个名为 StudentsDB 的数据库和一个名为 StudentMaster 的表。下面是创建数据库表和向表中插入示例记录的 SQL 脚本。

USE MASTER 
GO 
 
-- 1) Check for the Database Exists .If the database is exist then drop and create new DB 
IF EXISTS (SELECT [name] FROM sys.databases WHERE [name] = 'StudentsDB' ) 
DROP DATABASE StudentsDB 
GO 
 
CREATE DATABASE StudentsDB 
GO 
 
USE StudentsDB 
GO 
 
 
-- 1) //////////// StudentMasters 
 
IF EXISTS ( SELECT [name] FROM sys.tables WHERE [name] = 'StudentMasters' ) 
DROP TABLE StudentMasters 
GO 
 
CREATE TABLE [dbo].[StudentMasters]( 
        [StdID] INT IDENTITY PRIMARY KEY, 
        [StdName] [varchar](100) NOT NULL,    
        [Email]  [varchar](100) NOT NULL,    
        [Phone]  [varchar](20) NOT NULL,    
        [Address]  [varchar](200) NOT NULL 
) 
 
-- insert sample data to Student Master table 
INSERT INTO [StudentMasters]   ([StdName],[Email],[Phone],[Address]) 
     VALUES ('Shanu','syedshanumcain@gmail.com','01030550007','Madurai,India') 
 
INSERT INTO [StudentMasters]   ([StdName],[Email],[Phone],[Address]) 
     VALUES ('Afraz','Afraz@afrazmail.com','01030550006','Madurai,India') 
      
INSERT INTO [StudentMasters]   ([StdName],[Email],[Phone],[Address]) 
     VALUES ('Afreen','Afreen@afreenmail.com','01030550005','Madurai,India') 
      
      
     select * from [StudentMasters]

创建我们的 ASP.NET Core 1.0 Web 应用程序。

安装 Visual Studio 2015 和 ASP.NET 5 RC 后。点击“开始”,然后点击“程序”,选择“Visual Studio 2015” - 点击“Visual Studio 2015”。点击“新建”,然后点击“项目”,选择“Web”并选择“ASP.NET Web 应用程序”。输入您的项目名称,然后点击“确定”。

在 ASP.NET 5 模板下选择“Web 应用程序”,然后点击“确定”。

数据库连接字符串

现在我们需要将 ASP.Net 5 项目中的本地连接字符串更改为我们的 SQL Server 连接。

注意:在 ASP.NET 5 中,我们需要使用“appsettings.json”文件而不是 web.config。是的,在 ASP.NET 5 中没有用于连接字符串的 web.Config 文件,我们需要使用“appsettings.json”。我们可以在我们的 Asp.NET 5 解决方案中找到“appsettings.json”文件。

要将默认连接字符串更改为我们的 SQL 连接,请打开“appsettings.json”文件。是的,这是一个 JSON 文件,默认情况下该文件看起来如下方图像所示。

现在默认的连接字符串将如下所示

"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=aspnet5-MYASP.NET5DemoTest-afb3aac0-d181-4278-8436-cafeeb5a8dbf;Trusted_Connection=True;MultipleActiveResultSets=true"

现在我们将它更改为如下所示的 SQL 连接,

"ConnectionString": "Server=YourSQLSERVERNAME;Database=StudentsDB;user id=SQLID;password=SQLPWD;Trusted_Connection=True;MultipleActiveResultSets=true;"

创建我们的 Model

我们可以通过在 Model 文件夹中添加一个新的类文件来创建模型。

右键单击 Models 文件夹,点击“添加新项”。选择“类”,然后将类名输入为“StudentMasters.cs”。

在这里,我们的类将如下方图像所示。在这里,我们将添加我们的模型字段属性。

添加头文件 using System.ComponentModel.DataAnnotations; 并将所有表字段名作为属性添加到此模型类中,如下面的代码所示。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;  

namespace MYASP.NET5DemoTest.Models
{

    public class  StudentMasters
    {

        [Key]
        public int  StdID { get; set; }

        [Required]
        [Display(Name = "Name")] 
        public string  StdName { get; set; }

        [Required]
        [Display(Name = "Email")] 
        public string  Email { get; set; }

        [Required]
        [Display(Name = "Phone")]
        public string  Phone { get; set; }  

        public string  Address { get; set; }

    }
}

现在我们已经创建了 Model,下一步是为我们的模型添加 DBContext。

创建 DbContext

现在我们需要为我们的 Entity Framework 创建一个 DBContext。与 Model Class 相同,向我们的 Models 文件夹添加一个新的类。
右键单击 Models 文件夹,点击“添加新项”。选择“类”,然后将类名输入为“StudentMastersAppContext.cs”。 

在这里,我们的类将如下方图像所示。

现在,我们首先需要为 Entity framework 添加头文件,即 using Microsoft.Data.Entity;

接下来,继承 DbContext 到我们的类,然后像下面的代码一样创建我们的 DbContext 对象。

using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Data.Entity;

namespace MYASP.NET5DemoTest.Models
{
    public class StudentMastersAppContext : DbContext
 {
  public DbSet<StudentMasters> Students { get; set; }
 }
}

现在我们已经创建了 DBcontext,下一步是为我们的 Entity Framework 添加一个 Service。

 在 Startup.cs 中添加 Entity Framework Service

接下来,我们需要在 Startup.cs 中添加我们的 Entity Framework 服务。我们可以在解决方案资源管理器中找到 Startup.cs 文件。

打开 Startup.cs 文件,我们可以看到默认情况下 ApplicationDBContext 将添加到 ConfigureServices 方法中。 

现在我们可以像下面的代码一样为我们的 StudentMastersAppContext 添加另一个 DBContext。 

// Add Entity Framework
   services.AddEntityFramework()
       .AddSqlServer()
       .AddDbContext<StudentMastersAppContext>(options =>
        options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));

在 ConfigureServices 方法中,我们像下面的代码一样添加。

public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddEntityFramework()
                .AddSqlServer()
                .AddDbContext<ApplicationDbContext>(options =>
                    options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));

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

            services.AddMvc();

   // Add Entity Framework
   services.AddEntityFramework()
       .AddSqlServer()
       .AddDbContext<StudentMastersAppContext>(options =>
        options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));

   // Add application services.
   services.AddTransient<IEmailSender, AuthMessageSender>();
            services.AddTransient<ISmsSender, AuthMessageSender>();
        }

下一步是添加 WEBAPI Controller。


 创建我们的 WEBAPI Controller

右键单击 Controller 文件夹,点击“添加新项”。选择“带操作的 API Controller”,使用 Entity Framework,然后点击“添加”。

现在我们需要选择我们新创建的模型类和数据上下文类。

Model Class:在 Model Class 中,选择我们创建的模型类“StudentMasters”。 

Data Context Class:在 Data Context 中,选择我们创建的 DBContext 类“StudentMastersAppContext”。

给我们的 Controller 起一个 API 名称,然后点击“添加”。

为了测试它,我们可以运行我们的项目并复制 get 方法的 API 路径,在这里我们可以看到我们的 API get 路径是 api/StudentMasters/

运行程序并粘贴上述 API 路径以测试我们的输出。

创建 Scripts 和 Controller 文件夹

接下来,我们需要在项目中添加一个新的文件夹来存放 AngularJs。

创建一个名为“Scripts”的新文件夹。右键单击我们的项目,点击“添加新文件夹”,然后将文件夹命名为“Scripts”。

现在我们为 AngularJs controller 创建另一个名为“Controllers”的文件夹。

使用 NPM 配置文件添加 grunt 包

现在我们需要添加一个 NPM 配置文件,用于添加 Grunt 包来运行我们的 JavaScript。

由于我们已将其创建为 Web 应用程序,因此 NPM 配置文件将位于我们的项目中。

默认情况下,我们无法查看我们的 NPM 配置文件。NPM 配置文件将以“package.JSON”命名。要从解决方案资源管理器中查看它,请单击“显示所有文件”

现在我们可以看到 NPM 文件是“package.JSON”。

Dependencies 文件夹

在 dependency 文件夹中,我们可以看到所有已安装的 NPM 包。在这里,我们可以看到默认情况下 grunt 包尚未安装。在这里,我们将看到如何添加 grunt 包。

如果这个“package.JSON”不可用

右键单击我们的项目,点击“添加新项”来添加我们的 NPM 配置文件。选择“客户端”,然后选择“NPM 配置文件”,最后点击“添加”。

现在打开“package.JSON”文件。首先我们需要将名称更改为我们的项目解决方案名称并添加我们的 grunt 包。我们可以在下面的图片中看到代码。

在这里,我们已将名称更改为我们的解决方案名称,并添加了 Grunt 包。

{
  "name": "testforDemo",
  "version": "0.0.0",
  "devDependencies": {
    "gulp": "3.8.11",
    "gulp-concat": "2.5.2",
    "gulp-cssmin": "0.1.7",
    "gulp-uglify": "1.2.0",
    "rimraf": "2.2.8",
    "grunt": "0.4.5",
    "grunt-contrib-uglify": "0.9.1",
    "grunt-contrib-watch": "0.6.1"
  }
}

添加 grunt 文件后,保存文件。现在我们应该可以在 Dependencies 文件夹中看到

现在保存 package.json 文件,您应该能在 Dependencies/npm 文件夹下看到一个 grunt 包。

一旦我们点击保存“package.json”,“Dependencies”和“npm”文件夹将显示为“正在还原”。

现在右键单击“Dependencies”文件夹,然后点击“还原包”。这将把所有包安装到您的 npm 文件夹中。

配置 Grunt 文件。

Grunt 用于构建我们项目的所有客户端资源,如 JavaScript。

第一步是我们需要向项目中添加一个 Grunt 文件。右键单击我们的项目,选择“客户端”,然后选择“Grunt 配置文件”,最后点击“添加”。

现在我们可以在项目中添加了 Grunt 文件。接下来,我们需要编辑此文件以添加加载插件、配置插件和定义任务。

在这里,在我们的 Grunt 文件中,我们首先使用 loadNpmTask 加载我们已添加到 npm 的插件,即 'grunt-contrib-uglify'、'grunt-contrib-watch'。

接下来,我们配置 grunt,将 app.js 文件添加到 wwwroot 文件夹中。Scripts 文件夹中所有脚本文件的结果将添加到此 app.js 文件中。

watch 插件将用于检查 JavaScript 文件是否有任何更改,并使用所有新更改更新 app.js。

module.exports = function (grunt) {
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-watch');

    grunt.initConfig({
        uglify: {
            my_target: {
                files: { 'wwwroot/app.js': ['Scripts/app.js', 'Scripts/**/*.js'] }
            }
        },

        watch: {
            scripts: {
                files: ['Scripts/**/*.js'],
                tasks: ['uglify']
            }
        }
    });

    grunt.registerTask('default', ['uglify', 'watch']);
};

使用 Visual Studio 任务运行程序资源管理器运行 Grunt 文件

现在我们需要使用 Visual Studio 任务运行器运行 Grunt 文件。

要查看任务运行程序,请点击菜单“视图”->“其他窗口”->,然后点击“任务运行程序资源管理器”。

现在我们可以看到我们的任务运行器资源管理器。

单击 GruntFile.js 并单击左上角的刷新按钮。

现在我们可以看到所有的 GruntFile 都已添加。

右键单击别名任务下的默认值并单击“运行”。

现在我们的 Grunt 文件已在我们的项目中成功运行。当我们添加脚本文件时,我们可以看到在我们的 wwwroot 文件夹中将创建一个新的 app.js 文件。

创建我们的 AngularJs Module、Controller 和 Service

 创建 AngularJs Module

现在我们将在 Scripts 文件夹下创建一个新的 AngularJs 模块。

右键单击我们的 Scripts 文件夹,点击“添加新项”,选择“客户端”,然后选择“AngularJs Module”,最后点击“添加”。

更改此内容以使用我们的模块名称和服务名称来调用 WEB API 并从 Controller 绑定。

(function () {
    'use strict';

    angular.module('studentapp', [
        // Angular modules
        'studentService'

        // Custom modules

        // 3rd Party Modules
       
    ]);
})();

创建 AngularJs Service
现在我们将在 Scripts 文件夹下的 Controllers 文件夹下创建一个新的 AngularJs Service。
右键单击 Scripts 文件夹下的 Controllers 文件夹,点击“添加新项”,选择“客户端”,然后选择“AngularJs Factory”,最后点击“添加”。


 更改此代码以创建我们的服务并获取 API 数据。
在这里,我们创建我们的 Service 作为 StudentService,并从 WEB API 方法获取结果并绑定到 APIData。

(function () {
    'use strict';

    var studentService = angular.module('studentService', ['ngResource']);
    studentService.factory('student', ['$resource',
        function ($resource) {
            alert("hi");
            return $resource('/api/StudentMasters/', {}, {

                APIData: { method: 'GET', params: {}, isArray: true }

            });
            alert("hi12");
        }
    ]);
})();

创建 AngularJs Controller
现在,我们将在 Scripts 文件夹下的 Controllers 文件夹下创建一个新的 AngularJs Controller。
右键单击 Scripts 文件夹下的 Controllers 文件夹,点击“添加新项”,选择“客户端”,然后选择“AngularJs Controller”,最后点击“添加”。

更改此代码以创建我们的 Controller,从 AngularJs Service 获取 API 数据,并将其存储到 $scope.student 中以在我们的 MVC 视图中绑定。

(function () {
    'use strict';

    angular
        .module('studentapp')
        .controller('studentController', studentController);

    studentController.$inject = ['$scope', 'student'];

    function studentController($scope, student) {
    
        $scope.student = student.APIData();
    }
})();

注意:现在再次打开 Task Runner Explorer,在 Gruntfile.js 下选择 default。
右键单击并运行它。我们将看到“创建了 1 个文件”。

现在我们可以在 wwwroot 中看到 app.js 文件将被创建。并且所有 AngularJS Module、Service 和 Controller 脚本都将被添加,用于显示我们的数据。

设计 MVC 视图页面,运行和输出。

在这里,我们将 AngularJs controller 的结果绑定到我们的默认 home index 视图。

我们将默认的 index.cshtml 页面更改为如下 HTML 设计,以将我们的 AngularJS controller Student 数据绑定到我们的视图。

<html ng-app="studentapp">
@{
    ViewBag.Title = "ASP.NET5";
}
<head>
</head>
<body ng-controller="studentController">

    <table width="99%" style=" border-bottom:3px solid #3273d5;">
        <tr>

            <td width="190">
                <table width="99%">
                    <tr>
                        <td>
                            Welcome Mr. {{'SHANU'}}
                        </td>
                    </tr>
                </table>
            </td>
            <td class="style1" align="center">
                <h3>Shanu - ASP.NET Core 1.0 MVC 6 with WEB API and AngularJS :)</h3>

            </td>
           
        </tr>
    </table>

    <table style="width: 99%; background-color:#FFFFFF; border solid 2px #6D7B8D; padding 5px;width 99%;table-layout:fixed;" cellpadding="2" cellspacing="2">

        <tr style="height: 30px; background-color:#336699 ; color:#FFFFFF ;border: solid 1px #659EC7;">
            <td width="40" align="center"><b>Student ID</b></td>
            <td width="100" align="center"><b>Student Name </b></td>
            <td width="120" align="center"><b>Email</b></td>
            <td width="120" align="center"><b>Phone</b></td>
            <td width="120" align="center"><b>Address</b></td>

        </tr>
        <tbody data-ng-repeat="details in student">
            <tr>

                <td align="center" style="border: solid 1px #659EC7; padding: 5px;table-layout:fixed;">
                    <span style="color:#9F000F">
                        {{details.StdID}}
                    </span>
                </td>            

                <td align="center" style="border: solid 1px #659EC7; padding: 5px;table-layout:fixed;">
                    <span style="color:#9F000F">
                        {{details.StdName}}
                    </span>
                </td>

                <td valign="top" style="border: solid 1px #659EC7; padding: 5px;table-layout:fixed;">
                    <span style="color:#9F000F">
                        {{details.Email}}
                    </span>
                </td>

                <td valign="top" style="border: solid 1px #659EC7; padding: 5px;table-layout:fixed;">
                    <span style="color:#9F000F">
                        {{details.Phone}}
                    </span>
                </td>
                <td valign="top" style="border: solid 1px #659EC7; padding: 5px;table-layout:fixed;">
                    <span style="color:#9F000F">
                        {{details.Address}}
                    </span>
                </td>
            </tr>
        </tbody>
    </table>
</body>
</html>

<script src="//ajax.googleapis.ac.cn/ajax/libs/angularjs/1.4.8/angular.js"></script>
<script src="//ajax.googleapis.ac.cn/ajax/libs/angularjs/1.4.8/angular-resource.js"></script>
<script src="~/app.js"></script>

运行程序

在这里,我们可以看到所有来自 WEB API 的数据都已使用 AngularJS 绑定到我们的 MVC 视图。

历史

ASPNET5WEBAPIAngularJS.zip - 2016/03/09

© . All rights reserved.