博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在 .NET Core 中运行 JavaScript
阅读量:6684 次
发布时间:2019-06-25

本文共 2576 字,大约阅读时间需要 8 分钟。

一.前言

在 .NET Framework 时,我们可以通过V8.NET等组件来运行 JavaScript,不过目前我看了好几个开源组件包括V8.NET都还不支持 .NET Core ,我们如何在 .NET Core 中运行 JavaScript 呢,答案是使用 NodeServices。关于为何有在 .NET Core 中执行 JavaScript 这种需求,比较特殊,举个栗子:当你做模拟登录时,目标网站可能采用一些加密算法来计算特殊的值,如果你要完全模拟,那么除了用C#翻译这个算法还有个办法就是直接将这段加密算法JS代码拷贝使用C#来执行。还举个栗子:SPA服务端渲染,比如Angular、 React等。

二.什么是 NodeServices

NodeServices 是一个 ASP.NET Core 中间件,将它添加到 ASP.NET Core 管道中,该中间件调用Node在运行时执行JavaScript。 这意味着如果使用 NodeServices,你必须在主机上安装Node。

三.使用 NodeServices

NodeServices 的开源地址为:

在 Nuget 发布的包名为:Microsoft.AspNetCore.NodeServices

1.新建一个 ASP.NET Core 2.2 应用程序

2.然后通过Nuget安装包 Microsoft.AspNetCore.NodeServices(v2.2.0)

3.在Startup.cs文件的ConfigureServices方法中引用它

public void ConfigureServices(IServiceCollection services)

{
services.AddNodeServices();
}
现在,我们可以使用接口INodeServices来调用Js代码,它的源码如下:

public interface INodeServices : IDisposable

{
Task<T> InvokeAsync<T>(string moduleName, params object[] args);
Task<T> InvokeAsync<T>(CancellationToken cancellationToken, string moduleName, params object[] args);

Task
InvokeExportAsync
(string moduleName, string exportedFunctionName, params object[] args);Task
InvokeExportAsync
(CancellationToken cancellationToken, string moduleName, string exportedFunctionName, params object[] args);

}

基本用法

现在我们已经安装了 NodeServicess,让我们看一下简单的用例,然后介绍如何在应用程序中执行一些简单的JavaScript 并捕获输出。郑州哪里看妇科好:

首先,我们将首先创建一个包含返回问候消息的 NodeJs module 的简单JavaScript文件,保存在 scripts/greeter.js文件中:

// greeter.js

module.exports = function (callback, name) {

var greet = function (name) {    return "Hello " + name;}callback(null, greet(name));

}

接下来,我们将INodeServices的一个实例注入到我们的控制器中,并通过调用InvokeAsync<T>方法来调用我们的Js代码,其中T是我们Js代码的返回类型(在这个实例中是一个string)。

[Route("api/[controller]")]

[ApiController]
public class ValuesController : ControllerBase
{
private readonly INodeServices _services;

public ValuesController(INodeServices services){    _services = services;}// GET api/values[HttpGet]public async Task
Get(){ string greetingMessage = await _services.InvokeAsync
("./scripts/greeter", "晓晨"); return greetingMessage;}

}

运行测试:

1552615237181

四.结束

NodeServices 可以使 .NET Core 接入 NodeJs 生态,创造了更多的可能,大家可以去探索更多的用法。

五.参考资料

Using Node Services in ASP.NET Core by dotnetthoughts

Executing JavaScript inside of .NET Core using JavaScriptServices by josephwoodward

本文Demo: DotNetCoreUseJs

增加一个组件 其也支持 .NET Core 运行 JavaScript,跨平台的。

.NET Core 交流群:4656606(将满),923036995 欢迎加×××流

如果您认为这篇文章还不错或者有所收获,您可以点击右下角的【推荐】按钮精神支持,因为这种支持是我继续写作,分享的最大动力!

转载于:https://blog.51cto.com/14236847/2363495

你可能感兴趣的文章
Flask开发
查看>>
trickle 限制用户空间带宽
查看>>
SQL事务
查看>>
GRE配置案例实现远程网络通信
查看>>
不用linux作为桌面的N个理由
查看>>
Rabbitmq学习之路3-cluster
查看>>
iptables实现NAT(网络搜索整理)
查看>>
关于ip地址
查看>>
ASP.NET自定义404和500错误页面
查看>>
OpenGL学习(七)纹理映射
查看>>
一些必不可少的Sublime Text 2插件
查看>>
测试项目
查看>>
第一章ASP.NET SignalR简介
查看>>
SSH
查看>>
41-50(UIApplication和delegate,UIApplicationMain,UIWindow,程序启动的完整过程,控制器view的延迟加载)...
查看>>
HTTP服务器实现
查看>>
2017.03
查看>>
未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项
查看>>
思科模拟器Packet Tracer的使用
查看>>
资产-服务器变更流程图
查看>>