【发布时间】:2018-11-15 10:42:31
【问题描述】:
我有一个 Asp.net core 2 Web api。我正在尝试实现自定义授权过滤器。
目前我有以下内容:
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:适合类型的构造函数 授权过滤器;无法定位。确保类型是具体的 并为公共的所有参数注册服务 构造函数。
所以在我的 startup.cs 文件中我还添加了:
services.AddScoped<IAuthorizationFilter, AuthorisationFilter>();
但是没有区别
【问题讨论】:
标签: c# asp.net-mvc asp.net-web-api .net-core