asp.net 基于角色重定向用户(不运行OnGet)

jqjz2hbq  于 2023-06-25  发布在  .NET
关注(0)|答案(1)|浏览(149)

ASP.NETCore应用程序的用户具有不同的角色。不同的角色可以访问不同的页面。
我已经实施了策略并正确地为相关角色授权了各种文件夹。
但我也需要重定向一些用户到一个不同的区域,以便他们看到他们应该看到的页面,而不是只是得到一个访问拒绝错误。
我知道我可以从我的常规索引文件中使用User.IsInRole()并将它们重定向到正确的页面,但我想我更希望他们永远不能加载他们没有访问权限的页面。而且我更愿意对这些用户禁用我的常规索引文件。
我该怎么做?是否已使用策略等支持此功能?或者我需要编写某种中间件吗?

e4yzc0pl

e4yzc0pl1#

在ASP.NET中,可以使用HttpContext对象及其Response属性将用户重定向到中间件中的其他请求。下面是一个如何实现此目标的示例:

using Microsoft.AspNetCore.Http;

public class MyMiddleware
{
    private readonly RequestDelegate _next;

    public MyMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        
        // you can get token or other things that use in authorization from  
        // context and check if you need to redirect it 
        bool shouldRedirect = DetermineRedirectionLogic(context);

        if (shouldRedirect)
        {
            // Perform the redirection
            context.Response.Redirect("/new-url");
            return;
        }

        // If no redirection is required, continue to the next middleware
        await _next(context);
    }

    private bool DetermineRedirectionLogic(HttpContext context)
    {
        // Add your custom logic here to determine if redirection is needed
        // For example, you can check request properties or conditions

        // If redirection is required, return true; otherwise, return false
        return true;
    }
}

在中间件的InvokeAsync方法中,可以在DetermineRedirectionLogic方法中添加自定义逻辑,以根据当前请求确定是否需要重定向。如果需要重定向,可以使用context.response.redirect将用户重定向到其他URL。
确保在Startup类的Configure方法中注册中间件:

public void Configure(IApplicationBuilder app)
{
    // ...

    app.UseMiddleware<MyMiddleware>();

    // ...
}

相关问题