Captcha服务(后续2)— 改造Captcha服务之Asp.Net Core项目中如何集成TypeScript
环境准备
.Net Core 版本:下载安装.Net Core SDK,安装完成之后查看sdk版本 ,查看命令dotnet --version,我的版本是2.2.101
IDE: Visual Studio 2017
目标:将 我的GitHub项目 Captcha.WebApi 改造,在项目中使用TypeScript
运行环境准备
安装Node.js
如果已经安装请忽略,https://nodejs.org/zh-cn/ 下载nodejs,我选择的是LTS版本。
安装完成之后验证是否安装成功。cmd命令node -v,如果提示'node' 不是内部或外部命令,也不是可运行的程序 或批处理文件。,可能是因为在安装之前已经打开了cmd,重新打开一个cmd终端。
我的nodejs版本是v10.14.2。
安装TypeScript
如果已经安装请忽略。TypeScript网站可访问:https://www.typescriptlang.org/ 和 https://www.tslang.cn/
安装命令npm install -g typescript,安装之后验证是否可用,tsc -v,我的版本是Version 3.2.2。
项目集成tsc命令
右键选择项目属性,点击生成事件,在生成前时间命令行输入tsc,如下图所示

添加tsconfig.json
可以参考 https://www.tslang.cn/docs/handbook/asp-net-core.html
可以在配置中指定编译生成的js文件的位置("outDir": "wwwroot/js"),我的配置如下
{
"compilerOptions": {
"noImplicitAny": false,
"noEmitOnError": true,
"removeComments": false,
"sourceMap": true,
"target": "es5",
"outDir": "wwwroot/js"
},
"exclude": [
"node_modules",
"wwwroot"
]
}
添加完成之后,重新生成解决方案,发现会报错MSB3073 命令“tsc”已退出,代码为 9009。
重启Visual Studio之后再次编译。如果仍编译不通过,在解决方案的目录下cmd执行npm install之后再次编译。
开发
ts如何使用jQuery写ajax
通过npm安装@types/jquery,在项目目录下,cmd命令npm i @types/jquery
先写个ajax get请求
class HttpService {
static readonly instance = new HttpService();
private constructor() {
}
public async getAsync<T>(url: string): Promise<T> {
try {
const result = await $.ajax(url, { type: "GET" });
return result as T;
} catch (e) {
alert(e);
}
}
}
编译报错,提示TS2705 (TS) ES5/ES3 中的异步函数或方法需要 "Promise" 构造函数。确保对 "Promise" 构造函数进行了声明或在 "--lib" 选项中包含了 "ES2015"。
解决办法:打开tsconfig.json,添加lib选项,修改之后的tsconfig.json,如下
{
"compilerOptions": {
"noImplicitAny": false,
"noEmitOnError": true,
"removeComments": false,
"sourceMap": true,
"target": "es5",
"outDir": "wwwroot/js",
"lib": [
"es2016",
"dom",
"es5"
]
},
"exclude": [
"node_modules",
"wwwroot"
]
}
重新生成解决方案,编译成功。接着写post请求。
cshtml页面引入js
<script src="~/js/httpService.js" charset="utf-8"></script>
<script src="~/js/captcha.js" charset="utf-8"></script>
debug报错:httpService.js和captcha.js不存在,发现Configure方法未启用静态文件。
添加app.UseStaticFiles();
再次运行,调试ok。
GitHub地址:WebApi_AspDotNetCore2_2_TypeScript
直接下载或者clone下来之后运行,如果报错,请安装本地环境,并配置生成前时间命令行,在项目目录下cmd执行npm install
查看之前文章:
使用.Net Core 2.1开发Captcha图片验证码服务
Captcha服务(后续1)
参考文章:https://www.tslang.cn/docs/handbook/asp-net-core.html
Captcha服务(后续2)— 改造Captcha服务之Asp.Net Core项目中如何集成TypeScript的更多相关文章
- Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- 在 .NET Core项目中使用UEditor图片、文件上传服务
在.NET Framework中使用UEditor时,只需要将UEditor提供的后端服务,部署为一个子程序,即可直接使用文件上传相关的服务,但是UEditor官方并未提供.Net Core的项目,并 ...
- Asp.Net Core微服务初体验
ASP.Net Core的基本配置 .在VS中调试的时候有很多修改Web应用运行端口的方法.但是在开发.调试微服务应用的时候可能需要同时在不同端口上开启多个服务器的实例,因此下面主要看看如何通过命令行 ...
- ASP.NET Core 与 Vue.js 服务端渲染
http://mgyongyosi.com/2016/Vuejs-server-side-rendering-with-aspnet-core/ 原作者:Mihály Gyöngyösi 译者:oop ...
- (7)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- 利用Polly+AOP+依赖注入封装的降级框架
创建简单的熔断降级框架 要达到的目标是: 参与降级的方法参数要一样,当HelloAsync执行出错的时候执行HelloFallBackAsync方法. public class Person { [H ...
- 使用 ASP.NET Core 3.1 的微服务开发指南
使用 ASP.NET Core 3.1 的微服务 – 终极详细指南 https://procodeguide.com/programming/microservices-asp-net-core/ A ...
- ASP.NET Core gRPC 使用 Consul 服务注册发现
一. 前言 gRPC 在当前最常见的应用就是在微服务场景中,所以不可避免的会有服务注册与发现问题,我们使用gRPC实现的服务可以使用 Consul 或者 etcd 作为服务注册与发现中心,本文主要介绍 ...
- 如何在 ASP.NET Core 中构建轻量级服务
在 ASP.NET Core 中处理 Web 应用程序时,我们可能经常希望构建轻量级服务,也就是没有模板或控制器类的服务. 轻量级服务可以降低资源消耗,而且能够提高性能.我们可以在 Startup 或 ...
- ASP.NET Core开发-获取所有注入(DI)服务
获取ASP.NET Core中所有注入(DI)服务,在ASP.NET Core中加入了Dependency Injection依赖注入. 我们在Controller,或者在ASP.NET Core程序 ...
随机推荐
- 面试题:int和Integer的区别
java底层源码: -128 127之间
- SpringBoot+ Mybatis 搭建
spring boot+mybatis整合 LZ今天自己搭建了下Spring boot+Mybatis,比原来的Spring+SpringMVC+Mybatis简单好多.其实只用Spring bo ...
- for循环:用turtle画一颗五角星
import turtle # 设置初始位置 turtle.penup() turtle.left(90) turtle.fd(200) turtle.pendown() turtle.right(9 ...
- js的七大设计原则--迪米特原则
一.什么是迪米特原则 迪米特原则也叫最少知道原则,一个类应该对其他对象保持最少的了解.通俗来讲,就是一个类对自己依赖的类知道的越少越好.因为类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另 ...
- mysql数据库的基本操作:索引、视图,导入和导出,备份和恢复
1.索引: 索引是一种与表有关的结构,它的作用相当于书的目录,可以根据目录中的页码快速找到所需的内容. 当表中有大量记录时,若要对表进行查询,没有索引的情况是全表搜索:将所有记录一一取出,和查询条件进 ...
- Java中的读写锁
一.读写锁 1.初识读写锁 a)Java中的锁——Lock和synchronized中介绍的ReentrantLock和synchronized基本上都是排它锁,意味着这些锁在同一时刻只允许一个线程进 ...
- [Swift]LeetCode703. 数据流中的第K大元素 | Kth Largest Element in a Stream
Design a class to find the kth largest element in a stream. Note that it is the kth largest element ...
- [Abp 源码分析]六、工作单元的实现
0.简介 在 Abp 框架内部实现了工作单元,在这里讲解一下,什么是工作单元? Unit Of Work(工作单元)模式用来维护一个由已经被业务事物修改(增加.删除或更新)的业务对象组成的列表.Uni ...
- Python内置函数(15)——dict
英文文档: class dict(**kwarg) class dict(mapping, **kwarg) class dict(iterable, **kwarg) Return a new di ...
- CDN边缘节点容器调度实践(下)
5月27日,OSC 源创会在上海成功举办.又拍云系统开发高级工程师黄励博在大会分享了<CDN 边缘节点容器调度的实践>.主要介绍又拍云自主开发的边缘节点容器调度方案,从 0 到 1 ,实现 ...