2017-02-21 4 views
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()); 
    } 
} 

答えて

0

これは私のために働くように見える前にcontext.resultを設定すると動作します...(私はちょうどあなたの承認ロジックの左)コントローラ上の

public class MyActionFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext context) 
    { 
     context.Result = new RedirectToActionResult("Index", "Home", null); 
    } 
} 

応用...

Aboutアクションは、常にインデックスアクションにリダイレクトされるようになりました。

+0

コントローラを表示するために編集しました。依存フィルタを挿入するためにタイプフィルタを使用しました。リダイレクトに影響するかどうかはわかりませんが、結果を設定しても何もしません –

関連する問題