环境准备

.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的更多相关文章

  1. Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  2. 在 .NET Core项目中使用UEditor图片、文件上传服务

    在.NET Framework中使用UEditor时,只需要将UEditor提供的后端服务,部署为一个子程序,即可直接使用文件上传相关的服务,但是UEditor官方并未提供.Net Core的项目,并 ...

  3. Asp.Net Core微服务初体验

    ASP.Net Core的基本配置 .在VS中调试的时候有很多修改Web应用运行端口的方法.但是在开发.调试微服务应用的时候可能需要同时在不同端口上开启多个服务器的实例,因此下面主要看看如何通过命令行 ...

  4. ASP.NET Core 与 Vue.js 服务端渲染

    http://mgyongyosi.com/2016/Vuejs-server-side-rendering-with-aspnet-core/ 原作者:Mihály Gyöngyösi 译者:oop ...

  5. (7)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- 利用Polly+AOP+依赖注入封装的降级框架

    创建简单的熔断降级框架 要达到的目标是: 参与降级的方法参数要一样,当HelloAsync执行出错的时候执行HelloFallBackAsync方法. public class Person { [H ...

  6. 使用 ASP.NET Core 3.1 的微服务开发指南

    使用 ASP.NET Core 3.1 的微服务 – 终极详细指南 https://procodeguide.com/programming/microservices-asp-net-core/ A ...

  7. ASP.NET Core gRPC 使用 Consul 服务注册发现

    一. 前言 gRPC 在当前最常见的应用就是在微服务场景中,所以不可避免的会有服务注册与发现问题,我们使用gRPC实现的服务可以使用 Consul 或者 etcd 作为服务注册与发现中心,本文主要介绍 ...

  8. 如何在 ASP.NET Core 中构建轻量级服务

    在 ASP.NET Core 中处理 Web 应用程序时,我们可能经常希望构建轻量级服务,也就是没有模板或控制器类的服务. 轻量级服务可以降低资源消耗,而且能够提高性能.我们可以在 Startup 或 ...

  9. ASP.NET Core开发-获取所有注入(DI)服务

    获取ASP.NET Core中所有注入(DI)服务,在ASP.NET Core中加入了Dependency Injection依赖注入. 我们在Controller,或者在ASP.NET Core程序 ...

随机推荐

  1. django 源码报错

    启动django ,一直提示一个 AttributeError: 'str' object has no attribute 'decode' 哥,查了一下午google,就怕是自己判断错了,最后在一 ...

  2. C# 使用WinApi操作剪切板Clipboard

    前言: 最近正好写一个程序,需要操作剪切板 功能很简单,只需要从剪切板内读取字符串,然后清空剪切板,然后再把字符串导入剪切板 我想当然的使用我最拿手的C#来完成这项工作,原因无他,因为.Net框架封装 ...

  3. 问题:这个新申请的内存为什么不能free掉?(已解决)

    一.问题描述 先上代码, /*** 省略 ***/ uChar *base64 = NULL; /*** 省略 ***/ base64 = (一段内存) /*** 省略 ***/ base64 = s ...

  4. 【阿里聚安全·安全周刊】女主换脸人工合成小电影|伊朗间谍APP苹果安卓皆中招

    本周的七个关键词: 人工智能 丨 HTTP链接=不安全链接 丨  滑动验证码 丨 伊朗间谍APP 丨 加密挖矿 丨  Android应用测试速查表 丨 黑客销售签名证书 -1-   [人工智能]女主换 ...

  5. 1.5 A better alternative thing: React Native

    In 2015, React Native (RN) was born. At that time, few people paid attention to it because it was st ...

  6. Python前世今生以及种类、安装环境

    一.Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为A ...

  7. FFmpeg 结构体学习(六): AVCodecContext 分析

    在上文FFmpeg 结构体学习(五): AVCodec 分析我们学习了AVCodec结构体的相关内容.本文,我们将讲述一下AVCodecContext. AVCodecContext是包含变量较多的结 ...

  8. [Swift]LeetCode166. 分数到小数 | Fraction to Recurring Decimal

    Given two integers representing the numerator and denominator of a fraction, return the fraction in ...

  9. [Swift]LeetCode654. 最大二叉树 | Maximum Binary Tree

    Given an integer array with no duplicates. A maximum tree building on this array is defined as follo ...

  10. 多线程系列(四):Task

    目录: 为什么要使用任务 任务 一.为什么使用任务 线程池已经可以让我们简单地创建线程,并优化了性能. 但是,线程池的缺点在于,我不清楚我的操作什么时候完成,也不能收到返回值,因为委托是没有返回值的. ...