通过 WebAssembly 在 JavaScript 中调用 C# 方法
Posted
技术标签:
【中文标题】通过 WebAssembly 在 JavaScript 中调用 C# 方法【英文标题】:Call C# Method in JavaScript via WebAssembly 【发布时间】:2021-12-11 02:45:27 【问题描述】:为了提供一些上下文,我正在尝试将现有的 C# 应用程序与 React SPA 连接起来。问题是,C# 代码包含一些非常困难的数学计算,我无法重写。
我的想法是构建一个 Blazor WebAssembly 应用程序,其中包含现有的代码库。
经过无数小时尝试几种不同的解决方案后,我发现可以将 Blazor “_framework” 文件夹(通过构建项目生成)复制到我的 React 公共文件夹中。这允许我从我的 javascript 代码中调用静态 C# 方法。到目前为止一切都很好,但不幸的是无法调用非静态方法。
根据this article,应该可以通过 IJSRuntime 发送 C# 实例,但这不适用于我的情况。从我的角度来看,IJSRuntime 似乎没有被注入,因为 JavaScript 代码不是 Blazor 的一部分。
有人知道如何将 IJSRuntime 注入 React 环境吗? 或者有没有更好的解决方案从 React 应用程序调用 C# 代码?
【问题讨论】:
【参考方案1】:为什么不使用简单的 REST API,而不是遍历所有这些东西?您可以简单地实现一个接受参数(通过 HTTP)并返回结果的端点。在大多数情况下,这比其他可能的方法更容易设置和维护。
只需添加:
app.UseEndpoints(endpoints => endpoints.MapControllers(); );
然后只需创建您的控制器,该控制器在构造函数(通过依赖注入)中接受您的非静态服务,并返回值:
[ApiController]
class MathController : ControllerBase
private readonly MyCalculatorService calculator;
MathController(MyCalculatorService calculator)
this.calculator = calculator;
[HttpPost("api/math/my-math")]
public async Task<ActionResult<MathResult>> MyMathEndpoint([FromBody] MathInput mathInput)
var result = calculator.GetResult(mathInput);
return new JsonResult(result);
MathInput
和 MathResult
只是示例,但您几乎可以使用任何东西。
【讨论】:
以上是关于通过 WebAssembly 在 JavaScript 中调用 C# 方法的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 WKWebVIew 或 JSC 在 iOS 应用程序中加载 WebAssembly
OpenSilver: 通过WebAssembly 复活Silverlight
通过 WebAssembly 在 JavaScript 中调用 C# 方法