【问题标题】:Detect client or server mode检测客户端或服务器模式
【发布时间】:2019-04-30 04:39:30
【问题描述】:

我正在构建一个可以在客户端模式和服务器模式之间切换的 Blazor 应用程序。应用程序的某些部分只能在其中一种情况下工作,并且需要在这种情况下执行回退代码。

有没有一种好方法可以检查 Mono 是否正在运行?

有什么建议吗?

【问题讨论】:

  • 你解决服务器/客户端执行“自动切换”了吗? Blazor in Internet Explorer JSInterOp 的任何情况,您都可以使用您启动的脚本询问。
  • 我有一个 JavaScript 解决方案,但我宁愿有一个只使用 C# 的解决方案。

标签: c# blazor


【解决方案1】:

使用RuntimeInformation.OSDescription

RuntimeInformation.OSDescription == "web"

【讨论】:

    【解决方案2】:

    也许这可以帮助你:

    // Mono WebAssembly is running.
    if (JSRuntime.Current is MonoWebAssemblyJSRuntime mono)
    {
    }
    else
    {
    }
    

    另请参阅instructions about BlazorDualMode,它允许您在两种模式下运行您的应用程序以及检查正在运行的模式。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      使用 JSRuntime.Current 不可靠,因为它在启动期间为空。以下应该随时可用。

      Type.GetType("Mono.Runtime") != null;

      我将这个类添加到 DI 容器中,因此可以用它来驱动行为。

        public class JsRuntimeLocation
        {
          public bool IsClientSide => HasMono;
          public bool IsServerSide => !HasMono;
          public bool HasMono => Type.GetType("Mono.Runtime") != null;
        }
      

      【讨论】:

      • 很好,我已经遇到了问题,不得不将我的代码放在App.cshtml 页面中作为解决方法。这要好得多。谢谢!
      【解决方案4】:

      此答案由 Microsoft here 提供。

      RuntimeInformation.IsOSPlatform(OSPlatform.Create("WEBASSEMBLY"))

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多