У меня есть веб-API Asp.net core 2. и я пытаюсь реализовать пользовательский фильтр авторизации.
На данный момент у меня есть следующее:
public class AuthorisationAttribute : TypeFilterAttribute
{
public AuthorisationAttribute() : base(typeof(AuthorisationFilter))
{
Arguments = new object[] { new Claim(ClaimTypes.UserData, "will be my user data") };
}
}
public class AuthorisationFilter : IAuthorizationFilter
{
readonly HttpContext _httpContext;
public AuthorisationFilter(HttpContext httpContext)
{
_httpContext = httpContext;
}
public void OnAuthorization(AuthorizationFilterContext context)
{
var authorisationCookie = context.HttpContext.Request.Headers.Where(t => t.Key == "auth").FirstOrDefault();
var temp = new JwtSecurityTokenHandler();
var unencryptedToken = temp.ReadToken(authorisationCookie.Value) as JwtSecurityToken;
var session = _httpContext.Session;
//MORE TO DO HERE YET! Just want to test getting called when expected.
return;
}
}
Тогда по методу контроллера У меня есть:
public class HomeController : Controller
{
[Authorisation(),HttpGet]
public IActionResult Index()
{
return View("~/Views/Home/Index.cshtml");
}
}
Когда я запускаю приложение, вызывается конструктор authorisationAttribute. В момент, когда я пытаюсь вызвать метод контроллера, я получаю следующую ошибку:
InvalidOperationException: подходящий конструктор для типа
AuthorisationFilter; не может быть найден. Убедитесь, что тип является конкретным
и сервисы прописаны по всем параметрам публичного
конструктор.
Итак, в моем файле startup.cs я также добавил:
services.AddScoped<IAuthorizationFilter, AuthorisationFilter>();
но это не имеет значения