安庆网站建设价格,网站说建设中,义乌网站推广,怎么做游戏网站一.前言在 .NET Framework 时#xff0c;我们可以通过V8.NET等组件来运行 JavaScript#xff0c;不过目前我看了好几个开源组件包括V8.NET都还不支持 .NET Core #xff0c;我们如何在 .NET Core 中运行 JavaScript 呢#xff0c;答案是使用 NodeServices。关于为何有在 .N… 一.前言在 .NET Framework 时我们可以通过V8.NET等组件来运行 JavaScript不过目前我看了好几个开源组件包括V8.NET都还不支持 .NET Core 我们如何在 .NET Core 中运行 JavaScript 呢答案是使用 NodeServices。关于为何有在 .NET Core 中执行 JavaScript 这种需求比较特殊举个栗子当你做模拟登录时目标网站可能采用一些加密算法来计算特殊的值如果你要完全模拟那么除了用C#翻译这个算法还有个办法就是直接将这段加密算法JS代码拷贝使用C#来执行。还举个栗子SPA服务端渲染比如Angular、 React等。二.什么是 NodeServicesNodeServices 是一个 ASP.NET Core 中间件将它添加到 ASP.NET Core 管道中该中间件调用Node在运行时执行JavaScript。 这意味着如果使用 NodeServices你必须在主机上安装Node。三.使用 NodeServicesNodeServices 的开源地址为https://github.com/aspnet/JavaScriptServices在 Nuget 发布的包名为Microsoft.AspNetCore.NodeServices1.新建一个 ASP.NET Core 2.2 应用程序2.然后通过Nuget安装包 Microsoft.AspNetCore.NodeServicesv2.2.03.在Startup.cs文件的ConfigureServices方法中引用它public void ConfigureServices(IServiceCollection services){ services.AddNodeServices();}现在我们可以使用接口INodeServices来调用Js代码它的源码如下public interface INodeServices : IDisposable{ TaskT InvokeAsyncT(string moduleName, params object[] args); TaskT InvokeAsyncT(CancellationToken cancellationToken, string moduleName, params object[] args); TaskT InvokeExportAsyncT(string moduleName, string exportedFunctionName, params object[] args); TaskT InvokeExportAsyncT(CancellationToken cancellationToken, string moduleName, string exportedFunctionName, params object[] args);}基本用法现在我们已经安装了 NodeServicess让我们看一下简单的用例然后介绍如何在应用程序中执行一些简单的JavaScript 并捕获输出。首先我们将首先创建一个包含返回问候消息的 NodeJs module 的简单JavaScript文件保存在 scripts/greeter.js文件中module.exports function (callback, name) {var greet function (name) {return Hello name; } callback(null, greet(name));}接下来我们将INodeServices的一个实例注入到我们的控制器中并通过调用InvokeAsyncT方法来调用我们的Js代码其中T是我们Js代码的返回类型在这个实例中是一个string。[Route(api/[controller])][ApiController]public class ValuesController : ControllerBase{private readonly INodeServices _services;public ValuesController(INodeServices services){ _services services; } [HttpGet]public async Taskstring Get(){string greetingMessage await _services.InvokeAsyncstring(./scripts/greeter, 晓晨);return greetingMessage; }}运行测试四.结束NodeServices 可以使 .NET Core 接入 NodeJs 生态创造了更多的可能大家可以去探索更多的用法。五.参考资料Using Node Services in ASP.NET Core by dotnetthoughtsExecuting JavaScript inside of .NET Core using JavaScriptServices by josephwoodward本文Demo: DotNetCoreUseJs增加一个组件 https://github.com/sebastienros/jint 其也支持 .NET Core 运行 JavaScript跨平台的。