【发布时间】:2019-03-14 11:09:35
【问题描述】:
AuthenticationRequiredAttribute 类
public class AuthenticationRequiredAttribute : ActionFilterAttribute
{
ILoginTokenKeyApi _loginTokenKeyApi;
IMemoryCache _memoryCache;
public AuthenticationRequiredAttribute(IMemoryCache memoryCache)
{
_memoryCache = memoryCache;
_loginTokenKeyApi = new LoginTokenKeyController(new UnitOfWork());
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var memory = _memoryCache.Get(Constants.KEYNAME_FOR_AUTHENTICATED_PAGES);
string requestedPath = filterContext.HttpContext.Request.Path;
string tokenKey = filterContext.HttpContext.Session.GetString("TokenKey")?.ToString();
bool? isLoggedIn = _loginTokenKeyApi.IsLoggedInByTokenKey(tokenKey).Data;
if (isLoggedIn == null ||
!((bool)isLoggedIn) ||
!Constants.AUTHENTICATED_PAGES_FOR_NORMAL_USERS.Contains(requestedPath))
{
filterContext.Result = new JsonResult(new { HttpStatusCode.Unauthorized });
}
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
}
}
HomeController
public class HomeController : Controller
{
IUserApi _userApi;
ILoginTokenKeyApi _loginTokenKey;
IMemoryCache _memoryCache;
public HomeController(IUserApi userApi, ILoginTokenKeyApi loginTokenKey, IMemoryCache memoryCache)
{
_loginTokenKey = loginTokenKey;
_userApi = userApi;
_memoryCache = memoryCache;
}
[AuthenticationRequired] // There is AN ERROR !!
public IActionResult Example()
{
return View();
}
}
错误:
错误 CS7036 没有给出对应于 所需的形式参数“memoryCache”的 'AuthenticationRequiredAttribute.AuthenticationRequiredAttribute(IMemoryCache)' Project.Ground.WebUI
我的问题实际上是:我不能在属性类中使用依赖注入。
我想使用不带任何参数的属性。有什么办法可以解决吗?我使用依赖注入,但它不能用于属性。如何使用它?
【问题讨论】:
-
@Liam 这个问题是关于 ASP.NET MVC 而不是 ASP.NET Core,所以那里的答案并不真正适用。
-
您今天更改接受的答案有什么原因吗?我在下面的回答重点介绍了解决此问题的三种常见方法,而支出者的回答仅关注其中一种(这通常也被认为是一种反模式)。
标签: c# asp.net .net asp.net-core memorycache