首頁 > 軟體

ASP.NET Core使用功能開關控制路由存取操作

2022-02-20 13:00:48

前言:

在前面的文章,我們介紹了使用Middleware有條件地允許存取路由(《ASP.NET Core使用Middleware設定有條件允許存取路由》)。

而對於一些試驗性的功能,我們並不希望用密碼去控制是否允許存取,而是想用一種開關的方式開放。

1.功能開關

功能開關(Feature flags)就是這樣一種部署技術,有助於提高應用程式的靈活性。

使用功能開關,你可以將新功能部署到生產環境中,但限制其可用性。

通過使用開關,你可以為控制是否啟用一項新功能,而無需重新啟動應用程式或部署新程式碼。

它們將新功能的釋出與程式碼部署分離。

3.實現

首先,我們需要參照nugetMicrosoft.FeatureManagement.AspNetCore

然後,修改Startup.cs程式碼:

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddFeatureManagement();
    ...
}

接著,增加一個設定:

"FeatureManagement": 
    {
        "ForbiddenDebugEndpoint": false
    }

3.使用

修改我們上次實現的DebugMiddleware

public class DebugMiddleware : IMiddleware
{
    private readonly IFeatureManager _featureManager;

    public DebugMiddleware(IFeatureManager featureManager)
    {
        _featureManager = featureManager;
    }
    public async Task InvokeAsync(HttpContext context, RequestDelegate next)
    {
        var isDebugEndpoint = context.Request.Path.Value.Contains("/test");
        var debugEndpoint = await _featureManager.IsEnabledAsync("ForbiddenDebugEndpoint");

        if (isDebugEndpoint && debugEndpoint)
        {
            context.SetEndpoint(new Endpoint((context) =>
            {
                context.Response.StatusCode = StatusCodes.Status403Forbidden;
                return Task.CompletedTask;
            },
                        EndpointMetadataCollection.Empty,
                        "無權存取"));
        }

        await next(context);
            
    }
}

關鍵就是這句話,我們使用了功能開關:

var debugEndpoint = await _featureManager.IsEnabledAsync("ForbiddenDebugEndpoint");

結論:

執行後我們發現,只需修改設定,無需重啟程式,我們就可以控制是否可以存取路由了:

到此這篇關於ASP.NET Core使用功能開關控制路由存取操作的文章就介紹到這了,更多相關ASP.NET Core使用功能開關控制路由存取內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com