HTML5技术

在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序 - SmallProg(2)

字号+ 作者:H5之家 来源:H5之家 2017-07-08 16:01 我要评论( )

app.Use( async (context, next) = { await next(); if (context.Response.StatusCode == 404 !System.IO.Path.HasExtension(context.Request.Path.Value) !context.Request.Path.Value.StartsWith( )){context.Req

app.Use(async (context, next) => { await next(); if (context.Response.StatusCode == 404 && !System.IO.Path.HasExtension(context.Request.Path.Value) && !context.Request.Path.Value.StartsWith()) { context.Request.Path = ; await next(); } }); app.UseMvcWithDefaultRoute(); app.UseDefaultFiles(); app.UseStaticFiles();

这里简单说一下,首先第一个app.Use中间件的作用是当系统返回404状态码并且访问的Request不包含文件扩展名并且访问Request不是以“/api/”开头的访问直接将其跳转到/index.html

app.UseMvcWithDefaultRoute()的意思是使用MVC的默认路由中间件。

app.UseDefaultFiles()的意思是启用默认文档提供器中间件,他会对只有主机的URL进行访问时搜索default.html、default.htm、index.html、index.htm文件,如果有就返回内容。

app.UseStaticFiles()的意思启用程序的静态文件支持,也就是启用wwwroot文件夹可以通过URL访问。

4. 创建一个APIController

在根目录中创建一个Controllers的文件夹,当然直接在根目录创建一个WebAPIController也可以。

image

这里简单说一下,VS2017 15.2(26430.14)这个版本有一个小bug,就是当你使用MVC脚手架功能的时候,比如上图的新建中的“控制器”,亦或者在Controller的Action中使用右键新建视图的功能时,中文会出现乱码。所以我推荐大家直接使用“新建项”,放弃使用脚手架功能。当然在目前的项目中涉及不到上述问题。

image

创建一个默认的ValuesController

让我们来修改一下ValuesController中Get方法的返回值:

image

public IEnumerable<string> Get() { [] { , }; }

创建一个Angular4的应用程序

我们的Asp.Net Core服务器已经构建完成了。现在让我们来向项目中添加Angular

1. 在项目位置中打开CMD或PowerShell命令行工具

以PowerShell为例,输如如下命令,导航到项目所在目录:

PS C:\WINDOWS\system32> cd F:\Code\TFSProject\GitHub\AspNetCoreWithAngular4\AspNetCoreWithAngular4\AspNetCoreWithAngular 4

我的这个路径有点长,当人如果你觉得麻烦,可以安装一个小插件。他可以直接从项目根目录打开命令行工具。插件的名字是:

Open Command Line,你可以通过Visual Studio Marketplace下载安装。安装好之后,你就可以通过如下方式直接在根目录打开命令行工具了:

解析一下这条命令:

ng new是AngularCLI的新建命令

--skip-install是npm的跳过还原包命令

作用就是在当前目录下新建一个Angular项目并且跳过还原包

大神别嫌我啰嗦。我要照顾一下新手。

OK,运行之后的结果:

image

4. 目录调整

回到VS,你会发现,目录中多了一个Angular的目录:

image

这就是刚刚我们使用AngularCLI安装后的文件。

让我们调整一下目录结构,已使Angular能更好的集成到Core中:

image

将Angular文件夹下的所有文件拖拽到系统根目录下。并且删除Angular文件夹。调整后的结果:

image

啰嗦几句,其中package.json是Angular的所有包文件,你可以打开看一下,其中包含许多除了Angular包以外的依赖包。

如果你想了解这些文件都是干嘛的,作用是什么,请参考Angular官网

之后我们需要把src文件夹重命名一下,当然也可以不重命名,为了看着方便,我把他重命名为ClientApp。

image

5. 启用Angular的HTTP模式和表单绑定模式

打开ClientApp/app/app.module.ts文件,加入FormsModule和HttpModule并且在NgMudule导入

image

这里插一句,由于我们在安装Angular时使用了--skip-install,所以这里会提示我们@angular组件找不到,不过没关系,我们会在之后还原Angular的相关包

import { BrowserModule } ; import { NgModule } ; import { FormsModule } ; import { HttpModule } ; import { AppComponent } ; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, FormsModule, HttpModule ], providers: [], bootstrap: [AppComponent] }) export ; import { Http } @Component({ selector: , templateUrl: , styleUrls: [] }) export class AppComponent implements OnInit { constructor(private _httpService: Http) { } apiValues: string[] = []; ngOnInit() { ).subscribe(values => { this.apiValues = values.json() as string[]; }); } }

当Angular在Core上运行之后,他会向ValuesController发出GET请求,并且返回一个字符串数组。

之后我们需要修改ClientApp/app/app.component.html文件,然他来显示WebApi返回的数据:

image

这是一个Asp.Net Core 1.1 With Angular4应用程序 下面的信息是由Asp.Net Core WebAPI返回的{{value}}

其中 *ngFor循环遍历apiValues并一个一个的输出到value中。这是Angular的一种语法。更多语法你需要参阅Angular官方文档。


8. 安装Angular所有依赖项

这一步我们就要用到node了。就是安装AngularCLI一样。使用NPM包管理器。

首先开启Powershell或CMD命令提示行工具,将路径设置到项目根目录。执行如下命令:

npm install

执行该命令后,npm会根据项目中的package.json配置文件安装包括Angular在内的所有依赖包:

image

image

当出现如上图所示界面,没有ERR,表示Angular包安装成功了。其中会有两个警告,不必在乎。这是正常的。

回到VS,显示全部文件,你会发现多出一个node_module的文件夹,并且依赖项中会出现npm依赖,这个文件夹里包含的就是包括Angular在内的所有依赖包。不要把他包含在项目中。否则会出错。

image


编译并运行程序1. 编译Angular程序

执行AngularCLI命令编译Angular程序,同样需要使用PowerShell或CMD命令行工具,将路径设置为项目根目录,执行如下名:

ng build

image

image

编译成功之后,会显示如上图所示的内容

回到VS中你会发现wwwroot文件夹下出现了编译好的JS文件和HTML文件等。不要在意wwwroot文件夹的图标从一个小地球变成了文件图标。:-)

image

2. 编译运行Asp.Net Core应用程序

之后使用DotNetCLI编译并运行Asp.NET Core应用程序,执行如下命令:

dotnet run

image

3. 打开浏览器运行

打开浏览器,运行:5000,得到如下结果:

image



提升开发的友好度

也许有的朋友可能会说。太麻烦了。

是的。确实是有点麻烦,因为我们必须同时完成两条线路上的编译工作。

一条线路是Angular的编译工作。

另一条线路是Asp.Net Core的编译工作。

如果我们能够在Angular和Asp.Net Core的代码被更改时,系统自动编译他们,那就太好了。

这里我给出我的解决方案。如果有大神有更好的解决方案,可以留言或联系我。在此谢过~

1. 将API调用代理到Asp.Net Core服务上

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 2017年前端框架、类库、工具大比拼 - 葡萄城控件技术团队

    2017年前端框架、类库、工具大比拼 - 葡萄城控件技术团队

    2017-06-20 12:00

  • DIV CSS3处理元素重叠 - yueyang2017

    DIV CSS3处理元素重叠 - yueyang2017

    2017-05-22 11:01

  • DIV 行内关联 box-shadow对象盒子阴影以及图片阴影 - yueyang2017

    DIV 行内关联 box-shadow对象盒子阴影以及图片阴影 - yueyang2017

    2017-05-22 10:00

  • 微软 Build 2017 开发者大会:Azure 与 AI 的快速发展 - 葡萄城控件技术团队

    微软 Build 2017 开发者大会:Azure 与 AI 的快速发展 - 葡萄城控件

    2017-05-13 13:01

网友点评