我已经在IIS和Nginx中部署了我的.Net核心代码.有没有什么方法可以限制用户不使用特定的API并且不再部署代码?
或者,如果我必须再次部署,有什么方法可以限制用户,使他们不能使用该API?
我已经在IIS和Nginx中部署了我的.Net核心代码.有没有什么方法可以限制用户不使用特定的API并且不再部署代码?
或者,如果我必须再次部署,有什么方法可以限制用户,使他们不能使用该API?
如果我理解你的问题是正确的,你可以使用功能标志,.NET有一个内置的工具,允许你激活或停用给定的控制器或控制器操作,并通过你的应用程序设置来完成,而不需要更改和部署任何代码.
您可以通过以下方式执行此操作:
将服务添加到您的应用程序中的启动、程序或配置服务的任何位置:
using Microsoft.FeatureManagement;
builder.Services.AddFeatureManagement();
您可以将您的功能标志添加到appsettings.json中,这样您就可以在不接触代码的情况下轻松地进行更改,连接到您的appsets功能标志配置:
using Microsoft.Extensions.Configuration.AzureAppConfiguration;
var builder = WebApplication.CreateBuilder(args);
builder.Configuration.AddAzureAppConfiguration(options =>
options.Connect(
builder.Configuration["ConnectionStrings:AppConfig"])
.UseFeatureFlags());
我发现,使用内置的特性管理json属性,上面的方法更简单,但您也可以定义自己的特性并通过GetSection访问它,我不会在这里详细介绍.
然后,您应该将其添加到您的中间件中的应用程序:
builder.Services.AddAzureAppConfiguration();
app.UseAzureAppConfiguration();
和appsettings.json:
{"FeatureManagement": {
"FeatureA": true, // Feature flag set to on
"FeatureB": false, // Feature flag set to off
}
}
}
您还可以声明一些静态类来添加您的设置名称,以便于在整个应用程序中使用:
public static class MyFeatureFlags
{
public const string FeatureA = "FeatureA";
public const string FeatureB = "FeatureB";
}
您可以在操作/方法中使用它来"隐藏"给定流,或者使用它来禁用控制器或单个操作,我相信这就是您的用例:
using Microsoft.FeatureManagement.Mvc;
[FeatureGate(MyFeatureFlags.FeatureB)]
[HttpGet]
public ActionResult<Something> MyApi()
{
...
}
如您所见,FeatureB为False,因此操作将被禁用,如果您想要启用它,只需在您的设置中将其值更改为True,API就可以随时使用了.
您可以缓存这些值,以便在您 Select 更改它们时在给定的时间跨度内更新它们:
config.AddAzureAppConfiguration(options =>
options.Connect(
builder.Configuration["ConnectionStrings:AppConfig"])
.UseFeatureFlags(featureFlagOptions => {
featureFlagOptions.CacheExpirationInterval = TimeSpan.FromMinutes(5);
}));
之后,您只需更改功能标志的值,并等待缓存刷新您的应用程序设置数据.
请查看此页面以获取参考和更详细的信息,以便您可以在需要时根据您的特定实施调整此答案:
https://learn.microsoft.com/en-us/azure/azure-app-configuration/use-feature-flags-dotnet-core个