ASP.NET Core loves JavaScript

前言

在 ASP.NET 团队的 Github 的主页上,有这样一个开源项目叫:“JavaScriptsServices”,那么
什么是 JavaScriptsServices 呢? 它又有什么用呢?

下面就让我们一起来看一下吧。

什么是 JavascriptServices

GitHub:https://github.com/aspnet/JavaScriptServices

JavascriptServices 是微软提供给 ASP.NET Core 开发者的一项技术,如果你使用的是 Angular2,React,Knockout等这些Javascript技术之一的话, 他提供了一些基础的程序集供开发者来很方便的调用Javascript,同时,你可以很方便的整合 NodeJS 代码到你的ASP.NET Core应用程序中。

JavascriptServices 是提供给开发者一套工具,目前已经以NuGet包的形式释出,主要包括这三个程序集:Microsoft.AspNetCore.NodeServicesMicrosoft.AspNetCore.SpaServicesMicrosoft.AspNetCore.AngularServices。还有一个包叫ReactServices,现在已经不需要它了,你可以使用SpaServices替代之。现在就来分别看一下这三个包吧。

必须的环境:

1、NodeJS 环境,可以在程序目录下使用node -v,来查看是否具有Node环境。
2、ASP.NET Core 环境,可以在程序目录下使用 dotnet --version,来查看是否具有 dotnet 环境。

NodeServices

NodeServices 是一个基础包,它主要是提供了在 .NET 程序 Server 端运行 Javascript 的功能,要做到这一点,他是利用了NodeJS 的环境。来看看怎么样使用吧。

首先新建一个 ASP.NET Core WebApi 项目,然后在项目根目录新建一个Node文件夹,然后添加一个 addNumbers.js的文件,
文件内容如下:

module.exports = function (callback, first, second) {    var result = first + second;callback(null /* error */, result);
};

这里有有个JS函数,它将在.NET 程序中被调用,通过传入一个 Node风格的回调函数和两个参数来计算结果。
在NodeJS中,一个 JS 文件即代表一个模块,module.exports的意思是把当前函数作为一个对象提供出去以供调用。

然后在 Controller 文件夹新建一个 NodeController.cs 的文件。整个解决方案看起来是这个样子的:

为了使用 NodeServices,你需要 using Microsoft.AspNetCore.NodeServices,然后在 Startup.cs 文件中的 ConfigureServices 方法添加如下:

public void ConfigureServices(IServiceCollection services){    // ... 其他代码 ...// 启用 Node Servicesservices.AddNodeServices();
}

现在,你就可以在 Action 中使用NodeServices库为我们提供的功能了,打开NodeController.cs,修改如下:

using Microsoft.AspNetCore.NodeServices;[Route("api/[controller]")]public class NodeController : Controller{    public async Task<IActionResult> Get([FromServices] INodeServices nodeServices) {        var result = await nodeServices.InvokeAsync<int>("./Node/addNumbers", 1, 2);        return Content("1 + 2 = " + result);}
}

这里使用的是 [FromServices] 解析的INodeServices接口来供我们使用调用Node Javascript。然后我们再看一下InvokeAsync<T>(``),他是一个异步的方法,通过传入一个node.js脚本文件(模块),两个形参 来得到一个结果。

方法签名: Task InvokeAsync (string moduleName, params object[] args);

然后,我们使用 Postman 来测试一下:

结果符合预期,现在,我们已经在ASP.NET Core 程序中成功的调用了Node提供的Javascript脚本服务,是不是很方便。

SpaServices

SpaServices 这个包是基于 NodeServices 构建的,当你基于单页面应用(SPA)来构建应用程序的话,它为你提供了很多很有用的助手工具,像 路由助手(Routing)、服务端的预渲染(Pre-Rendering) 、Webpack中间件 、模块热替换(HMR)等。 下面来依次看一下:

Routing helper

在单页面应用程序中,也许你想同时配置服务端路由以及配置客户端路由,大多数时候,这两个路由系统将互不干扰独立运行。但是有些时候可能会有问题,就是怎么样识别404。

这个时候你可能就会用到 Routing helper ,它叫MapSpaFallbackRoute, 它将帮助你更加方便的做这个工作。

app.UseStaticFiles();app.UseMvc(routes =>
{routes.MapRoute(        name: "default",        template: "{controller=Home}/{action=Index}/{id?}");routes.MapSpaFallbackRoute(        name: "spa-fallback",        defaults: new { controller = "Home", action = "Index" });
});

Pre-Rendering

你可以创建一个同构的(Isomorphic )JavaScript 服务器预渲染的应用。对于 isomorphic web app 可能了解的人不是特别多,就是说一套JS代码可能同时运行于服务端和客户端,是不是很有趣,利用这种技术有助于提高SEO(搜索引擎优化)和客户端性能。

Webpack

如果你正在使用 webpack,那么 SpaServices 里面的 webpack 中间件将简化你的开发过程,使用此中间件将会拦截webpack匹配的文件请求并且在内存中动态构建,然后直接到浏览器中。

HMR

使用这种技术,你可以减少大幅减少模块加载的时间,通过启用中间件的HMR支持,在你对磁盘上的文件(如 .ts/.html/.sass 等)做出更改的时候,会自动构建,然后会把结果推到浏览器上,你就不需要手动的去刷新浏览器了。

app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions {HotModuleReplacement = true});

这个包还包含了很多其他的一些功能,有兴趣的可以去 github 了解一下。

AngularServices

AngularServices 主要提供了一些扩展的工具,包括一些验证助手,还有一些"cache priming"的功能。

示例模板

你可以通过 yeoman 工具来生成基于 Angular2、Knockout、React、React+Redux 等的ASP.NET Core SPAs 示例模板。

npm install -g yo generator-aspnetcore-spanpm install -g webpack

然后创建项目:

yo aspnetcore-spa

可以选择Angular2、Knockout、React、React+Redux等来生成SPA项目,生成完成后以开发环境方式启动项目:

Windows:

set ASPNETCORE_ENVIRONMENT=Developmentdotnet run

Linux 或 masOS:

export ASPNETCORE_ENVIRONMENT=Development
dotnet run

现在,你就可以感受一下基于 ASP.NET Core + SPA 的应用了。

试着对项目做更多你熟悉的操作吧:比如修改客户端资源(.ts, .tsx, .html),看看浏览器的变化吧。

总结

这是一套对于ASP.NET Core开发者来说非常方便的工具在构建 JavaScripts 应用程序服务时候,目前该库目前也在快速的迭代中,也许提供出来的这些功能只是一个开始……

原文地址:http://www.cnblogs.com/savorboard/p/dotnet-javascript-services.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

npm 常用命令详解

转载自 【原】npm 常用命令详解今年上半年在学习gulp的使用&#xff0c;对npm的掌握是必不可少的&#xff0c;经常到npm官网查询文档让我感到不爽&#xff0c;还不如整理了一些常用的命令到自己博客上&#xff0c;于是根据自己的理解简单翻译过来&#xff0c;终于有点输出&…

阿里云服务器 window server tomcat启动 并且关闭window防火墙 配置8080端口开放还是没用

阿里云windows server 服务器开放端口 1.远程服务器关闭windows防火墙 不需要开放端口 2.阿里云管理平台开放指定的端口 如8081 阿里云服务器 window server tomcat启动 并且关闭window防火墙 配置8080端口开放还是没用 必须阿里云控制台开放指定的端口 不…

以ABP为基础架构的一个中等规模的OA开发日志

前言&#xff1a; 最近园子里ABP炒的火热。看了几篇对于ABP的介绍后&#xff0c;深感其设计精巧&#xff0c;实现优雅。个人感觉&#xff0c;ABP或ABP衍生品的架构设计&#xff0c;未来会成为中型Net项目的首选架构模式。如果您还不了解ABP是什么&#xff0c;有什么特色&#x…

vue 指令基本使用大全

转载自 vue 指令基本使用大全 指令 解释&#xff1a;指令 (Directives) 是带有 v- 前缀的特殊属性作用&#xff1a;当表达式的值改变时&#xff0c;将其产生的连带影响&#xff0c;响应式地作用于 DOM 常用指令 v-textv-htmlv-bindv-text 解释&#xff1a;更新元素的 textCon…

JAVA基础学习---Markdown

这里写自定义目录标题Markdown学习标题字体引用分割线图片超链接列表有序列表无序列表表格代码进退源代码模式Markdown学习 标题 加上空格是一级标题&#xff0c;二级标题是两个#加上空格&#xff0c;以此类推 字体 hello&#xff0c;world 前后各加两个*是粗体 hello&…

opencv立方体的画法_用opengl立方体的画法

/*** &#xff01; 使用该程序前须知 &#xff01;1.首先下载 glut-3[1].7.6.rar 压缩包2.解压后里面会有如下三个文件&#xff0c;把这三个文件分别放入 to 后的文件夹glut32.dll to C:\windows\System32glut32.lib to ..\..\VC98\lib 这个目录在VC6.0安装目录中可以找到glut.…

oracle基本笔记整理及案例分析1

/* Oracle数据库的应用 */--创建一个自动增长的表空间worktbs create tablespace worktbs datafile E:\E盘\worktbs01.dbf size 10M autoextend on;--删除表空间 --drop tablespace worktbs;--在表空间里面创建一个新用户 create user martin --用户名 identified b…

使用 JavaScriptService 在.NET Core 里实现DES加密算法

文章《ASP.NET Core loves JavaScript》和《跨平台的 NodeJS 组件解决 .NetCore 不支持 System.Drawing图形功能的若干问题》为我们扩展.NET Core的API提供了一套解决方案&#xff0c;上周在看.NET的加解密算法发现目前为止没有包括DES算法&#xff0c;github上在才刚刚加入&am…

电脑基本快捷键的使用

电脑快捷键 Tab键 等于六个空格 Alt键 Alt加上F4关闭当前窗口 Ctrl键 Ctrl加S保存 shift键 shift加delete永久性的删除(不会出现在回收站中) win win加E打开我的电脑 win加tab桌面多窗口预览,切换 其他 cmd打开命令行窗口 任务管理器结束进程后 cmd输入explorer可…

IDEA把Springboot打成可执行jar包,内嵌tomcat 这个可以用

IDEA把Springboot打成可执行jar包&#xff0c;内嵌tomcat 2018年11月23日 18:36:30 ta山之石可以攻玉 阅读数 3061 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。https://blog.csdn.net/qq_30264689/article/details/84401995 IDEA把spring-boo…

axios使用说明

转载自 axios使用说明安装 使用 npm: $ npm install axios使用 bower: $ bower install axios使用 cdn: <script src"https://unpkg.com/axios/dist/axios.min.js"></script>Example 执行 GET 请求 // 为给定 ID 的 user 创建请求 axios.get(/user?ID1…

keras优化算法_自然场景文本识别(OCR),keras-yolo3-densenet-ocr

自然场景文本识别我之前是做自然语言的&#xff0c;但公司有个ocr的项目必须要做&#xff0c;因此开始学习ocr相关知识&#xff0c;边学边做两个多月&#xff0c;还有很多不太明白的地方&#xff0c;只能大概讲一讲经验教训。自然场景文本分类包括两个步骤&#xff0c;1、文本检…

JAVA---DOS命令学习

DOS命令学习 打开方式 1.开始加系统加命令行提示符 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aUOHads9-1608564937227)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20201221231009813.png)] 2.在搜索框中搜索cmd 3…

Google发布用于Google Cloud的.Net API

Google近期宣布针对Google Cloud API的.Net支持。这包括C#绑定和PowerShell cmdlet。还有一个Visual Studio扩展&#xff0c;它允许在Google Compute Engine上浏览Google Cloud 资源和部署Asp.Net 应用。 针对Google Cloud API的C#绑定 该C#绑定提供对以下Google Cloud服务的访…

Vue.js2.0开发环境搭建(一)

转载自 Vue.js2.0从入门到放弃---入门实例&#xff08;一&#xff09;最近&#xff0c;vue.js越来越火。在这样的大浪潮下&#xff0c;我也开始进入vue的学习行列中&#xff0c;在网上也搜了很多教程&#xff0c;按着教程来做&#xff0c;也总会出现这样那样的问题&#xff08…

联通培训 老师教的 bootstrap row 里面都是12行不断的分割成小格子

<!DOCTYPE html> <html> <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><title>欢迎页</title><meta content"widthdevice-width, initial-scale1, maximu…

numpy 数组抽取_清晰易懂的Numpy入门教程

原标题&#xff1a;清晰易懂的Numpy入门教程翻译 | 石头来源 | Machine Learning PlusNumpy是python语言中最基础和最强大的科学计算和数据处理的工具包&#xff0c;如数据分析工具pandas也是基于numpy构建的&#xff0c;机器学习包scikit-learn也大量使用了numpy方法。本文介绍…

oracle基本笔记整理及案例分析2

/**//* tp_orders表空间&#xff0c;大小10M&#xff0c;文件大小可自动增长&#xff0c;允许文件扩展&#xff0c;最大限度为无限制 创建A_oe用户的默认表空间为tp_orders 密码 bdqn 授予connect,resource权限党文a_hr用户的employee */ --创建表空间和用户&#xff0c;并授予…

Debugging into .NET Core源代码的两种方式

一、前言 .NET开源时间还不长&#xff0c;因为一直在做YOYOFx的关系&#xff0c;所似我常常有更深入的了解.NET Core和ASP.NET Core内容的需求&#xff0c;并且.NET Core平台与之前版本的变化太大&#xff0c;这也导致我经常要去查看源代码中&#xff0c;来了解ASP.NET Core和.…

JAVA基础学习大全(笔记)

JAVASE和JAVAEE的区别 JDK的安装路径 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-perPRPgq-1608641067105)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20201222001641906.png)] 卸载和安装JDK [外链图片转存失败,源站…