如何在.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);
}
返回情况