我对以下代码有问题。我尝试通过对构造函数的依赖项注入来实现自定义操作过滤器。
我按照本教程的确切方式进行操作,但我的自定义过滤器甚至没有被调用。
这是我迄今为止所实施的:
自定义过滤器.cs
public class CustomFilter : IActionFilter
{
private readonly UserManager<Kullanici> _userManager;
public CustomFilter(UserManager<Kullanici> userManager)
{
_userManager = userManager;
}
public void OnActionExecuted(ActionExecutedContext context)
{
var user = _userManager.GetUserAsync(context.HttpContext.User).Result;
if (user.KullaniciTipi != Models.Enums.KullaniciTipi.Mezun)
{
var controller = context.Controller as Controller;
controller.TempData["ErrorMessage"] = "Erişim hakkınız bulunmamaktadır.";
context.HttpContext.Response.Redirect("/");
}
}
public void OnActionExecuting(ActionExecutingContext context)
{
}
}
我的控制器中的操作方法:
[ServiceFilter(typeof(CustomFilter))]
public async Task<IActionResult> Profil()
{
var user = await _userManager.GetUserAsync(HttpContext.User);
var mezunHesabi = user.MezunHesabi;
ProfilViewModel profilViewModel = new ProfilViewModel();
profilViewModel.MapFromModel(mezunHesabi);
return View(profilViewModel);
}
还有我的
program.cs
文件:
builder.Services.AddScoped<CustomFilter>();
非常感谢任何帮助。
我希望调用我的自定义过滤器,但没有被调用,我遵循了所有必需的步骤,缺少什么?
我应该将我的代码放在 OnActionExecuting 而不是 OnActionExecuted 中。
public class CustomFilter : IActionFilter
{
private readonly UserManager<Kullanici> _userManager;
public CustomFilter(UserManager<Kullanici> userManager)
{
_userManager = userManager;
}
public void OnActionExecuting(ActionExecutingContext context)
{
var user = _userManager.GetUserAsync(context.HttpContext.User).Result;
if (user.KullaniciTipi != Models.Enums.KullaniciTipi.Mezun)
{
var controller = context.Controller as Controller;
controller.TempData["ErrorMessage"] = "Erişim hakkınız bulunmamaktadır.";
context.Result = new RedirectToActionResult(actionName: "Index", controllerName: "Home", null);
}
}
public void OnActionExecuted(ActionExecutedContext context)
{
}
}