【发布时间】:2018-07-13 04:28:39
【问题描述】:
我使用 .NET Core WebAPI 和依赖注入和多种身份验证模式(http 基本、访问密钥、JWT)。我注入了一些需要经过身份验证的用户数据的业务服务。如果用户通过任何 auth 中间件进行身份验证,DI 工作正常。如果用户未通过身份验证,DI 将无法解析某些服务。我需要 DI 返回null。
这怎么可能?下面的代码将导致异常,null 不允许作为结果。
services.AddTransient<IMasterRepository>(serviceProvider =>
{
var _serviceFactory = new RepositoriesFactory(Configuration);
if (!Authenticated)
{
return null;
}
return _serviceFactory.CreateMasterRepository();
});
另外,我不能在 auth 中间件中返回 401,因为另一个中间件可能会成功(解释:不能在 http 基本身份验证中间件中返回 401,因为下一个 JWT 可能会成功)
此外,我无法在所有身份验证中间件之后添加“需要身份验证”检查,因为某些控制器是公共的(不需要身份验证/依赖注入)。
有什么建议吗? 谢谢!
【问题讨论】:
-
当使用
?(C# 8) 将泛型类型明确声明为可为空时是否有效?
标签: c# authentication asp.net-web-api dependency-injection .net-core