ASP.Net 核心 2.2 - 方法重载出现在 Visual Studio 但在 运行 时不起作用
ASP.Net Core 2.2 - Method overload appears in Visual Studio but does not work at run-time
我正在尝试验证用户是否已通过自定义策略获得授权。我按照 Ode To Code 上的教程将此功能添加到我的控制器中。在 Visual Studio 中,代码似乎是正确的并且使用了已知的重载。
请注意,它说重载是 "extension"。直到我今天花了 5 个小时试图解决以下错误,我才注意到这一点:
如您所见,我尝试使用的过载似乎没有被使用。我在这里做错了什么吗?我需要做些什么来包含这些扩展方法吗?我已尝试清理和重建解决方案,但这并没有解决问题。
虽然您已经为 IAuthorizationSerivce
定义了字段,但您没有提供任何设置方法。您需要为 LRController
定义一个构造函数,它采用单个参数 IAuthorizationService
,并将其分配给字段。
我认为教程中有该构造函数的定义。
请注意名称更改:例如 IAuthorizationService _authorization
的全局变量名称已添加了下划线前缀。显然不是必需的,但作为 thumb/good 编码标准 IMO 的一个很好的规则。 :-)
public class LRController : Controller
{
private readonly IAuthorizationService _authorization;
// you're missing this constructor & this pattern is known as Constructor Dependency Injection
public LRController(IAuthorizationService authorization)
{
_authorization = authorization;
}
public async Task<RedirectToActionResult> Index()
{
var superAdmin = await _authorization.AuthorizeAsync(User, "IsLucky");
//rest of your code here
}
}
编辑
此外,如果您 wanted/needed 将其他接口注入该控制器,您需要将其添加到该 LRController 构造函数中。看起来像这样:
public class LRController : Controller
{
private readonly IAuthorizationService _authorization;
private readonly IOtherService _otherService;
public LRController(IAuthorizationService authorization, IOtherService otherService)
{
_authorization = authorization;
_otherService = otherService;
}
public async Task<RedirectToActionResult> Index()
{
var superAdmin = await _authorization.AuthorizeAsync(User, "IsLucky");
}
public async Task Foo()
{
await _otherService.Bar();
}
}
我正在尝试验证用户是否已通过自定义策略获得授权。我按照 Ode To Code 上的教程将此功能添加到我的控制器中。在 Visual Studio 中,代码似乎是正确的并且使用了已知的重载。
请注意,它说重载是 "extension"。直到我今天花了 5 个小时试图解决以下错误,我才注意到这一点:
如您所见,我尝试使用的过载似乎没有被使用。我在这里做错了什么吗?我需要做些什么来包含这些扩展方法吗?我已尝试清理和重建解决方案,但这并没有解决问题。
虽然您已经为 IAuthorizationSerivce
定义了字段,但您没有提供任何设置方法。您需要为 LRController
定义一个构造函数,它采用单个参数 IAuthorizationService
,并将其分配给字段。
我认为教程中有该构造函数的定义。
请注意名称更改:例如 IAuthorizationService _authorization
的全局变量名称已添加了下划线前缀。显然不是必需的,但作为 thumb/good 编码标准 IMO 的一个很好的规则。 :-)
public class LRController : Controller
{
private readonly IAuthorizationService _authorization;
// you're missing this constructor & this pattern is known as Constructor Dependency Injection
public LRController(IAuthorizationService authorization)
{
_authorization = authorization;
}
public async Task<RedirectToActionResult> Index()
{
var superAdmin = await _authorization.AuthorizeAsync(User, "IsLucky");
//rest of your code here
}
}
编辑
此外,如果您 wanted/needed 将其他接口注入该控制器,您需要将其添加到该 LRController 构造函数中。看起来像这样:
public class LRController : Controller
{
private readonly IAuthorizationService _authorization;
private readonly IOtherService _otherService;
public LRController(IAuthorizationService authorization, IOtherService otherService)
{
_authorization = authorization;
_otherService = otherService;
}
public async Task<RedirectToActionResult> Index()
{
var superAdmin = await _authorization.AuthorizeAsync(User, "IsLucky");
}
public async Task Foo()
{
await _otherService.Bar();
}
}