ASP.. NET核心授权中间件



我想做的是写一些ASP。. NET核心中间件允许用户在看到视图的内容之前进行授权。

我使用的是Microsoft.AspNetCore.Session包。

中间件的代码:
// simplified code that should check if the Session is valid
if (HttpContext.Session.GetString("xyz") == null)
{
//Return to Login View;
}
// else (when the session is valid) return to the view that the user wants to view. 

我不明白的地方:

  • 如何通过中间件将用户重定向到另一个页面
  • 如何在我的项目中正确使用中间件
  • 如果中间件是这种任务的正确方法
  • 或者如何在中间件中使用会话。它不工作的方式,我使用他们在控制器。

中间件在我的控制器中的实现图像

如何通过中间件将用户重定向到另一个页面

如何在我的项目中正确使用中间件

如果你想在某些情况下检查会话和重定向用户,您可以查看相关文档,并尝试在Program.cs

中使用下面的中间件
.......
app.UseRouting()
app.Use(async (context, next) =>
{
    if (context.Session.TryGetValue("key",out var val))
    {
        context.Response.Redirect("targeturi");
    }
    else
    {
        await next.Invoke();
    }
});
......

如果中间件是这种任务的正确方法

在asp.net core中已经有认证服务了,你可以检查这个文档并选择一个

或者如何在中间件中使用会话。这是行不通的我在控制器中使用它们。

您的图片显示您使用过滤器(TypeFilterAttribute),而不是中间件,您可以检查此文档相关

如果您想尝试使用授权过滤器,您可以尝试创建一个过滤器,如:

public class SomeFilter : IAuthorizationFilter
    {
        
        public void OnAuthorization(AuthorizationFilterContext context)
        {
            if (context.HttpContext.Session.TryGetValue("key",out var val))
            {
                context.Result = new RedirectResult("Index");
            }
        }
    }

应用过滤器:

[TypeFilter(typeof(SomeFilter))]