如何在.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检测内存泄漏?

.net core 生成的身份认证的代码在哪?还有生成的注册和登录页面在哪?

关于.net core 中的signalR组件的使用

[Asp.net Core]局部视图