【发布时间】:2019-05-01 12:07:57
【问题描述】:
我想编写一个自定义过滤器来检查用户是否登录到我的网站,如果没有,则将他们重定向回登录页面。
我希望过滤器在加载时自动应用于页面。
我已经尝试了下面的解决方案,但过滤器暂时不起作用。
过滤代码:
using Microsoft.AspNetCore.Mvc.Filters;
namespace MODS.Filters
{
public class AuthorisationPageFilter : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext context)
{
System.Diagnostics.Debug.Write("Filter Executed"); //write to debugger to test if working
//add real code here
base.OnActionExecuted(context);
}
}
}
接下来,这里是应用于页面模型的过滤器属性:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using MODS.Filters;
namespace MODS.Pages.Menus
{
[AuthorisationPageFilter]
public class Admin_MainMenuModel : PageModel
{
public ActionResult Admin_MainMenu()
{
System.Diagnostics.Debug.Write("Function Executed");
return new ViewResult();
}
}
}
我的印象是您需要在页面上调用一个动作/方法才能在页面加载时应用该功能(请告诉我这是否正确),所以这里是调用Admin_MainMenu方法的代码在 .cshtml 页面文件中(在 razor 页面顶部的代码块中):
Model.Admin_MainMenu();
我目前的想法是:
1.过滤器本身的类型错误(可能是IPageFilter?)
2.我实现它的方式是错误的(无论我将它应用于
页面模型,或者当我在页面上调用方法时)。
非常感谢任何帮助。谢谢。
【问题讨论】:
-
您是否使用 Identity 来管理身份验证?如果是这样,您可以将
[Authorize]放在您的 PageModel 上。如果没有,您如何对用户进行身份验证?
标签: c# razor filter razor-pages action-filter