0
ここに私のOnActionExecuting
メソッドがあります。私は条件がConsole.WriteLine
で満足していたかどうかを調べました。私のカスタムactionfilter属性から別のアクションにリダイレクトしようとしていますが、filtercontext.resultを設定しても何もしません。
EDIT:私が
ユーザー=が_userManager.GetUserAsync(context.HttpContext.Userを)待つ呼び出した後、コンテキスト結果を設定すると動作しないように見えます。
リダイレクトは、私はその
[AttributeUsage(AttributeTargets.All ,Inherited = true)]
public class HasPermissionAttribute: ActionFilterAttribute
{
private string _permission;
private AdminDbContext _context;
private UserManager<AdminUser> _userManager {get;set;}
private AdminUser user {get;set;}
private readonly IHostingEnvironment _hostingEnvironment;
public HasPermissionAttribute(String permission,IServiceScopeFactory serviceScopeFactory):base()
{
var serviceScope = serviceScopeFactory.CreateScope();
_context = serviceScope.ServiceProvider.GetRequiredService<AdminDbContext>();
_userManager = serviceScope.ServiceProvider.GetRequiredService<UserManager<AdminUser>>();
_permission=permission;
_hostingEnvironment=serviceScope.ServiceProvider.GetRequiredService<IHostingEnvironment>();
}
public override async void OnActionExecuting(ActionExecutingContext context)
{
// base.OnActionExecuting(context);
user = await _userManager.GetUserAsync(context.HttpContext.User);
string webRootPath = _hostingEnvironment.WebRootPath;
if (!HasPermission(_permission)) {
Console.WriteLine("condition passed");
context.Result = new RedirectToActionResult("UnauthorizedAccess", "UserGroup", null);
}
}
}
と相続コントローラ
public class UserGroupController : Controller
{
public UserGroupController(UserManager<AdminUser> userManager, RoleManager<Role> roleManager, ILoggerFactory loggerFactory,AdminDbContext adminDbContext,IHttpContextAccessor httpContextAccessor)
{
_logger = loggerFactory.CreateLogger<UserGroupController>();
_adminDbContext = adminDbContext;
_roleManager = roleManager;
_userManager=userManager;
_httpContextAccessor=httpContextAccessor;
}
[TypeFilter(typeof(HasPermissionAttribute),
Arguments = new object[] { "DELETE" })]
public async Task<IActionResult> Delete(int? id)
{
if (id == null)
{
return NotFound();
}
var role = await _roleManager.FindByIdAsync(id.ToString());
if (role == null)
{
return NotFound();
}
return View(role.ToViewModel());
}
}
コントローラを表示するために編集しました。依存フィルタを挿入するためにタイプフィルタを使用しました。リダイレクトに影響するかどうかはわかりませんが、結果を設定しても何もしません –