日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

在 .NET Core 中运行 JavaScript

發(fā)布時間:2023/12/4 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在 .NET Core 中运行 JavaScript 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一.前言

在 .NET Framework 時,我們可以通過V8.NET等組件來運(yùn)行 JavaScript,不過目前我看了好幾個開源組件包括V8.NET都還不支持 .NET Core ,我們?nèi)绾卧?.NET Core 中運(yùn)行 JavaScript 呢,答案是使用 NodeServices。關(guān)于為何有在 .NET Core 中執(zhí)行 JavaScript 這種需求,比較特殊,舉個栗子:當(dāng)你做模擬登錄時,目標(biāo)網(wǎng)站可能采用一些加密算法來計算特殊的值,如果你要完全模擬,那么除了用C#翻譯這個算法還有個辦法就是直接將這段加密算法JS代碼拷貝使用C#來執(zhí)行。還舉個栗子:SPA服務(wù)端渲染,比如Angular、 React等。

二.什么是 NodeServices

NodeServices 是一個 ASP.NET Core 中間件,將它添加到 ASP.NET Core 管道中,該中間件調(diào)用Node在運(yùn)行時執(zhí)行JavaScript。 這意味著如果使用 NodeServices,你必須在主機(jī)上安裝Node。

三.使用 NodeServices

NodeServices 的開源地址為:https://github.com/aspnet/JavaScriptServices

在 Nuget 發(fā)布的包名為:Microsoft.AspNetCore.NodeServices

1.新建一個 ASP.NET Core 2.2 應(yīng)用程序

2.然后通過Nuget安裝包?Microsoft.AspNetCore.NodeServices(v2.2.0)

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

public void ConfigureServices(IServiceCollection services)
{
services.AddNodeServices();
}

現(xiàn)在,我們可以使用接口INodeServices來調(diào)用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<T> InvokeExportAsync<T>(string moduleName, string exportedFunctionName, params object[] args);
Task<T> InvokeExportAsync<T>(CancellationToken cancellationToken, string moduleName, string exportedFunctionName, params object[] args);
}

基本用法

現(xiàn)在我們已經(jīng)安裝了 NodeServicess,讓我們看一下簡單的用例,然后介紹如何在應(yīng)用程序中執(zhí)行一些簡單的JavaScript 并捕獲輸出。

首先,我們將首先創(chuàng)建一個包含返回問候消息的 NodeJs module 的簡單JavaScript文件,保存在?scripts/greeter.js文件中:


module.exports = function (callback, name) {

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

callback(null, greet(name));
}

接下來,我們將INodeServices的一個實例注入到我們的控制器中,并通過調(diào)用InvokeAsync<T>方法來調(diào)用我們的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 Task<string> Get()
{
string greetingMessage = await _services.InvokeAsync<string>("./scripts/greeter", "曉晨");
return greetingMessage;
}
}

運(yùn)行測試:

四.結(jié)束

NodeServices 可以使 .NET Core 接入 NodeJs 生態(tài),創(chuàng)造了更多的可能,大家可以去探索更多的用法。

五.參考資料

Using Node Services in ASP.NET Core?by dotnetthoughts

Executing JavaScript inside of .NET Core using JavaScriptServices?by josephwoodward

本文Demo:?DotNetCoreUseJs

增加一個組件?https://github.com/sebastienros/jint?其也支持 .NET Core 運(yùn)行 JavaScript,跨平臺的。


總結(jié)

以上是生活随笔為你收集整理的在 .NET Core 中运行 JavaScript的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。