【问题标题】:Call C# Method in JavaScript via WebAssembly通过 WebAssembly 在 JavaScript 中调用 C# 方法
【发布时间】: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# 代码?

【问题讨论】:

    标签: javascript c# reactjs blazor


    【解决方案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);
      }
    }
    

    MathInputMathResult 只是示例,但您几乎可以使用任何东西。

    【讨论】:

      猜你喜欢
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      相关资源
      最近更新 更多