首页 > 解决方案 > 是 ASP.NET Core、Microsoft.FeatureManagementTagHelper 设计不好?

问题描述

我做了这样的步骤:

  1. Install-Package Microsoft.FeatureManagement.AspNetCore
  2. 放入 .cshtml 页面:
<feature name="IsDoomsday">you may type format c:</feature>
  1. 在 Startup.cs 中添加
services.AddFeatureManagement();
  1. 在 appsettings.json
{
  "FeatureManagement": { "IsDoomsday": false }
}

并希望仅在启用IsDoomsday功能时才显示“您可以键入格式 c:”字符串。显然我没有正确配置一些东西,我最新的 Firefox 78.0.2 出乎意料地显示“你可以输入格式 c:”并且有: 在生成的 html 的内脏中。<feature name="IsDoomsday">you may type format c:</feature>

怎么可能,这种关键功能的输出可能取决于错误配置并泄漏给用户,这是<feature>的设计失败吗?

(弱)修复:不要错过视图层次结构中的以下内容:

@addTagHelper *, Microsoft.FeatureManagement.AspNetCore

(PS:我最终在.cshtml页面中切换到@if)

@if (await FeatureManager.IsEnabledAsync("IsDoomsday"))
{
<text>you may type format c:</text>
}

标签: c#asp.net-core

解决方案


与其声称某些功能/库设计不佳,不如先阅读文档,了解它的工作原理,如果需要,请查看教程以了解如何使用它。您可以在此处找到教程:快速入门:向 ASP.NET Core 应用添加功能标志

以下工作非常好,我添加了解释:

  1. 安装 NuGet 包Microsoft.FeatureManagement.AspNetCore- 包含所需的功能

  2. 将功能添加到您的 appsettings.json 或 appsettings.{environment}.json 文件。包从构建的配置中读取。来自新项目的更新文件:

     {
       "Logging": {
         "LogLevel": {
           "Default": "Information",
           "Microsoft": "Warning",
           "Microsoft.Hosting.Lifetime": "Information"
         }
       },
       "FeatureManagement": {
         "IsDoomsday": true
       }
     }
    
  3. 注册包所需的服务。例如,您可以使用预先配置的 IConfiguration:

    services.AddFeatureManagement();
    
  4. 通过注册来启用 FeatureTagHelper,例如,在_ViewImports.cshtml

    @addTagHelper *, Microsoft.FeatureManagement.AspNetCore
    
  5. 在任何地方使用标签助手:

    <feature name="IsDoomsday">Hello doomsday</feature>
    

您可以随意使用"IsDoomsday": true | "IsDoomsday": false并查看它是否呈现或不呈现该功能,如预期的那样。


推荐阅读