如何在.Net Core调用NodeJs
Posted linkanyway
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在.Net Core调用NodeJs相关的知识,希望对你有一定的参考价值。
概述
目前.net core正处于飞速的成长期,虽然前途光明不容置疑,但是就生态而言还是比不上其他一些语种的大环境,那如果能够在.net core下调用其他语种的库加以利用那就能更好的发挥我们手头的.net core 而不至于因为库短缺而尴尬
NodeJs出生名门,依靠其异步IO广泛用于I/O密集的场景,而且世界上的javascript开发者也是多如牛毛!自然Nodejs的盛起也给他们的代码生活带来了前所未有的体验,同样JS的库也是五花八门一度占据了github的排行榜。
如果.net core能利用 nodejs的庞大生态库是不是很nice?
Microsoft.AspNetCore.NodeServices库
其实微软爸爸提供了Microsoft.AspNetCore.NodeServices这个库,专门用来调用nodejs服务
要使用NodeJs服务,首先需要Microsoft.AspNetCore.NodeServices在项目文件中包含包的引用。您可以使用dotnet add package Microsoft.AspNetCore.NodeServices命令执行此操作。
然后,您需要将Node Services中间件利用ConfigureServices()添加到请求管道。
现在,您可以利用INodeServices在应用程序中获取实例。并利用它调用在Node环境中运行的JavaScript的API。您可以使用FromServicesattribute在您的action方法中获取`INodeServices\'的实例
实例
这里我贴一个实例供参考
新建aspnet core站点
利用dotnet command建立站点
dotnet new mvc
添加nuget包
dotnet add package Microsoft.AspNetCore.NodeServices
建立node环境,此处示例用于扫描wifi环境
在站点根目录下利用npm建立环境
npm init -y npm install node-wifi --save-dev
建立nodejs的程序文件 index.js
var wifi = require("node-wifi"); module.exports = function(callback) { wifi.init({ iface: null // network interface, choose a random wifi interface if set to null }); // Scan networks wifi.scan( ).then(function (networks) { callback(null,networks)}); };
设置js文件为始终复制

注入配置
public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddNodeServices(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }
在控制器-Action处调用
public async Task<IActionResult> Wifi([FromServices] INodeServices nodeServices)
{
var result=await nodeServices.InvokeAsync<dynamic>("Index.js");
return new JsonResult(result);
}
返回情况

以上是关于如何在.Net Core调用NodeJs的主要内容,如果未能解决你的问题,请参考以下文章
.net core 3.0 Signalr - 09 待改进&交流
ASP.net MVC 代码片段问题中的 Jqgrid 实现
如何使用模块化代码片段中的LeakCanary检测内存泄漏?