如何解决在将动作加载到asp.net核心之前检查一些条件
这是我的行动
[HttpGet]
[Authorize(Roles = "AccountExecutive")]
public async Task<IActionResult> Index()
{
var me = await _userManager.GetUserAsync(HttpContext.User);
var companyContactsviewmodel = new Contactsviewmodel(me);
return View(companyContactsviewmodel);
}
现在尝试
public class ProfilerequiredActionFilter : ActionFilterattribute
{
public override void OnActionExecuted(ActionExecutedContext context)
{
base.OnActionExecuted(context);
}
}
Startup.cs
services.AddMvc(options=> {
options.Filters.Add<ProfilerequiredActionFilter>();
})
但是在过滤器中,我无法使用Usermanager,因此无法获取Currnet用户详细信息
我也想在Razor页面视图中做同样的事情
解决方法
如果要在ActionFilter中使用UserManager,可以将UserManager注入其中:
public class ProfileRequiredActionFilter : ActionFilterAttribute
{
private UserManager<IdentityUser> _userManager;
public ProfileRequiredActionFilter(UserManager<IdentityUser> userManager)
{
_userManager = userManager;
}
public override void OnActionExecuted(ActionExecutedContext context)
{
base.OnActionExecuted(context);
}
}
在剃须刀页面中没有动作过滤器。您可以使用IAsyncPageFilter并判断其中的处理程序方法的名称:
using Microsoft.Extensions.DependencyInjection;
public class CustomPageFilter : IAsyncPageFilter
{
public async Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context,PageHandlerExecutionDelegate next)
{
if (context.HandlerMethod?.Name == "Update")
{
// Running inside a handler method named "Update".
var svc = context.HttpContext.RequestServices;
var usermanager = svc.GetService<UserManager<IdentityUser>>();
}
}
Task IAsyncPageFilter.OnPageHandlerSelectionAsync(PageHandlerSelectedContext context)
{
return Task.CompletedTask;
}
}
startup.cs:
services.AddRazorPages().AddMvcOptions(options =>
{
options.Filters.Add(new CustomPageFilter());
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。