首页 > 解决方案 > 授权特定角色为假时无法重定向问题

问题描述

我开发 .NET CORE 3.0 Web 应用程序。该应用程序在单个解决方案中具有多层作为项目。UI 层中的登录页面。但是这个控制器代码在另一层,这个控制器顶部有一个Authorize和Roles Attribute控件。像这样:

控制器端:

namespace mytestsolution.ProjectX.Controllers
{
    [Authorize]
    [Authorize(Roles = "ProjectXAdmin")]
    public class AdminHomeController : Controller
    {
      public AdminHomeController( IHttpContextAccessor iHttpContextAccessor, IConfiguration configuration) 
        {
            _configuration = configuration;
            _httpContextAccessor = iHttpContextAccessor;
        }
       
       public IActionResult Index(){....}
    }
}

启动:

namespace mytestsolution.ProjectX
{
   public class Startup
   {
      public Startup(IConfiguration configuration)
      {
        Configuration = configuration;
      }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
          
           app.UseCors(options => options.AllowAnyOrigin());
            app.UseSession();

            var options = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
            app.UseRequestLocalization(options.Value);
              if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");

            }

            app.UseAuthentication();
            app.UseAuthorization();

            app.UseStaticFiles();
            app.UseRouting();

            app.UseMvcWithDefaultRoute();

            app.UseHttpsRedirection();  

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=AdminHome}/{action=Index}/{id?}");
            });

            app.UseCookiePolicy();
        }

   }
}

我想当未经授权和身份验证尝试通过链接访问(在本地示例中:localhost:50111/AdminHome/Index)时,重定向到登录页面。我的登录页面也是另一个子项目。解决方案项目结构为:

---mytestsolution.ProjectX
   --Model
   --View
   --Controller
   --...others...
---mytestsolution.ProjectY
   --Model
   --View
   --Controller
   --...others...
---mytestsolution.UI
   --Model
   --View
   --Controller
     --AccountController
   --...others...
---mytestsolution.Model
---mytestsolution.Data
---mytestsolution.API

但是现在,当我尝试注销然后访问 http:// localhost:50111/AdminHome/Index 时,它给了我 401 错误,当我尝试没有 AdminRole 用户登录然后访问 http:// localhost:50111/AdminHome /Index ,它给了我 403 错误,但我想在发生此错误时尝试,重定向到 .net core 3.0 项目中的登录页面。

标签: c#asp.net-mvcasp.net-mvc-3http-redirect.net-core-3.0

解决方案


推荐阅读