将 .NET Core 环境传递给 React.JS 应用程序

sna*_*nap 5 .net javascript reactjs asp.net-core featuretoggle

使用 .NET Core,在 Startup.cs 中,您可以访问 IHostingEnvironment,您可以从中获取 EnvironmentName,它对应于在服务器上设置的 ASPNETCORE_ENVIRONMENT 环境变量的值。这对于打开/关闭各种功能以及使用特定于环境的配置非常有用。但是对于一个全是 React.JS 的前端,有没有办法向下传递这个值,以便前端也知道它的环境?我可以想到一些可能的方法来完成,但它们看起来有点笨拙。这方面的最佳做法是什么?

Ben*_*ith 2

当您渲染将托管 React 应用程序的页面时,将环境变量添加为隐藏字段,例如

@page
@inject Microsoft.AspNetCore.Hosting.IHostingEnvironment hostingEnv

<input id="hostingEnv" 
       type="hidden" 
       value=@hostingEnv.EnvironmentName />

<div id="appRoot"></div>
Run Code Online (Sandbox Code Playgroud)

有关 IHostingEnvironment 的更多信息可以在此处找到。

然后,您可以使用以下代码访问 React 应用程序中该隐藏变量的值:

const hostingEnv = document.getElementById('hostingEnv').value
Run Code Online (Sandbox Code Playgroud)

至于这是否是“最佳实践”,没有最佳实践,只有良好实践!然而,这种方法对我来说很有效,尽管正如评论者所建议的那样,当然还有其他方法可以做到这一点(例如通过单独的网络请求)。

  • 如果所有文件都在 ClientApp 文件夹中并且 index.html 页面不是编译页面,这将如何工作?我们可以重新连接编译静态站点的 npm 构建以使用 .cshtml 页面作为首页吗? (4认同)