Fab*_*llo 7 asp.net asp.net-mvc dependency-injection filter
我正在努力尝试在类型的控制器过滤器属性中注入服务的ASP.NET MVC 6(beta 4版本)AuthorizationFilterAttribute.
这是服务(它注入了另一项服务)
public class UsersTableRepository
{
private readonly NeurosgarContext _dbContext;
public UsersTableRepository(NeurosgarContext DbContext)
{
_dbContext = DbContext;
}
public ICollection<User> AllUsers
{
get
{
return _dbContext.Users.ToList();
}
}
//other stuff...
}
Run Code Online (Sandbox Code Playgroud)
这是启动服务启用类中的ConfigureServices方法
public void ConfigureServices(IServiceCollection services)
{
//...
services.AddSingleton<NeurosgarContext>(a => NeurosgarContextFactory.GetContext());
services.AddSingleton<UifTableRepository<Nazione>>();
services.AddSingleton<UsersTableRepository>();
}
Run Code Online (Sandbox Code Playgroud)
一个简单的"虚拟"控制器,上面定义了两个过滤器.您可以注意到我已经通过装饰属性在该控制器中完成了DI [FromServices]并且它可以工作.
[Route("[controller]")]
[BasicAuthenticationFilter(Order = 0)]
[BasicAuthorizationFilter("Admin", Order = 1)]
public class DummyController : Controller
{
[FromServices]
public UsersTableRepository UsersRepository { get; set; }
// GET: /<controller>/
[Route("[action]")]
public IActionResult Index()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
在内部执行相同的DI BasicAuthenticationFilter不起作用,并且在运行时UserRepository属性是空引用.
public class BasicAuthenticationFilterAttribute : AuthorizationFilterAttribute
{
[FromServices]
public UsersTableRepository UsersRepository { get; set; }
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (!Authenticate(filterContext.HttpContext))
{
// 401 Response
var result = new HttpUnauthorizedResult();
// Add the header for Basic authentication require
filterContext.HttpContext.Response.Headers.Append("WWW-Authenticate", "Basic");
filterContext.Result = result;
//if (!HasAllowAnonymous(context))
//{
// base.Fail(context);
//}
}
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
有什么想法解决这个问题吗?
| 归档时间: |
|
| 查看次数: |
3977 次 |
| 最近记录: |