小编Dab*_*oul的帖子

在ASP.Net Core中在运行时安装新的中间件

当我的应用程序启动时,我有一堆模块(module1,module2 ......).对于每个模块,我都有一堆控制器操作:

/myModuleController/module1/action1
/myModuleController/module1/action2
/myModuleController/module2/action1
/myModuleController/module2/action2
…
Run Code Online (Sandbox Code Playgroud)

由于用户可以为每个模块记录一次,我为每个模块部署一个身份验证中间件,这样就可以这样做:

app.UseWhen((context) => context.Request.Path.StartsWithSegments(urlPath), appbuilder =>
    {
        appbuilder.UseCookieAuthentication(new CookieAuthenticationOptions()
        {
            CookieName = cookieName,
            …
        });
    });
Run Code Online (Sandbox Code Playgroud)

所以基本上,在url路径上/myModuleController/module1我有一个中间件加上它的cookie,另一个用于/myModuleController/module2...它有点不寻常我想但它工作正常,我对这种行为很满意.

问题出在这里:我希望能够在运行时添加一个新模块,这意味着能够使用一段代码部署一个新的中间件app.UseWhen(url, app. UseCookieAuthentication(…)).我试着天真地注入IApplicationBuilder app负责添加模块的控制器,但我得到一个例外:

System.InvalidOperationException:尝试激活'AdminController'时无法解析类型'Microsoft.AspNetCore.Builder.IApplicationBuilder'的服务

我的问题是:它应该有效吗?我一定是在某个地方弄错了?或者,你是否清楚我在这里尝试的东西没有机会工作?

你怎么会达到同样的要求?谢谢.

c# authentication dependency-injection asp.net-core

9
推荐指数
1
解决办法
1381
查看次数