c# - 授权特定角色为假时无法重定向问题
问题描述
我开发 .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 项目中的登录页面。
解决方案
推荐阅读
- javascript - 打印服务器响应
- angularjs - 在AngularJS列表的顶部选中复选框对项目进行排序
- python - Matplotlib 数据框饼图绘图与我的 0% 标签重叠
- idris - 带有延迟类型的孔。如何证明?
- ffmpeg - 转换多个文件FFmpeg的多个音轨
- windows - 读取 ETW TraceEvent,然后将其写回
- linux - 我不能与 GDB 和 QEMU 决裂
- amazon-web-services - 一个 zip 中的 AWS 多个 Lambda 函数
- python - 如何使脚本可执行?
- apache-flink - 使用单个 JobManager 进行恢复