You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何区分独立CSB应用与托管模式CSB应用

区分Blazor WASM托管/独立模式的最简方案

这里提供两类适配不同场景的方案,都可以直接满足你判断调用能力和展示标识的需求:


方案1:条件编译(首推,零运行时开销)

适用于两种模式分开打包的场景,完全没有多余性能损耗,打包时无关代码会自动裁剪:

  1. 右键你的Blazor WASM项目,选择「属性」→「生成」→「常规」→「条件编译符号」,仅在托管模式对应的生成配置里新增 HOSTED 自定义符号,不要修改独立模式的生成配置。
  2. 代码里直接用预编译指令做判断即可:
public static class AppRunMode
{
    // 直接判断是否为托管模式
    public static bool IsHosted =>
#if HOSTED
        true;
#else
        false;
#endif
    // 直接返回界面要展示的标识文本
    public static string DisplayTag => IsHosted ? "托管应用" : "独立应用";
}

方案2:运行时动态判断(适用于同一份WASM包兼容两种部署模式的场景)

如果你的WASM包不会分开编译,要同时适配两种部署模式,优先用全局变量嵌入方案,无额外网络开销:

  1. 托管模式的后端在返回的入口index.html里嵌入全局JS变量:
<script>
window.appRuntimeInfo = { isHosted: true };
</script>
  1. 独立模式的index.html里把这个变量的值设为false,或者不做定义。
  2. WASM启动时通过JS互操作读取变量值,存到全局状态即可:
var jsRuntime = services.BuildServiceProvider().GetRequiredService<IJSRuntime>();
bool isHosted = await jsRuntime.InvokeAsync<bool?>("appRuntimeInfo?.isHosted") ?? false;

如果不想修改HTML文件,也可以在启动时发起一次轻量GET请求,检测后端是否存在你预设的专属无鉴权端点(比如/api/app-mode),能正常返回预期结果就判定为托管模式,404/超时就判定为独立模式。

注意:不要直接通过URL Origin识别模式,会出现用户把独立模式部署在和后端同域名下的误判情况。


需求落地方式

  • 判断能否发起服务端REST调用:直接读AppRunMode.IsHosted的值即可,返回true则允许调用,返回false直接禁用相关功能或展示友好提示。
  • 界面展示标识:直接把AppRunMode.DisplayTag绑定到对应的UI组件上即可。

内容的提问来源于stack exchange,提问作者Ray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 19:15:00