它的一生都是在一个管道(pipeline)里度过的:
我们可以使用Filter机制,在适当的时间点“插入”自己的逻辑:
RazorPages预定义了一些接口,按执行的先后顺序依次是:
开发人员可以实现这些接口,在其接口方法中添加自定义的业务逻辑。比如:
public class NeedLogOnAttribute : IAuthorizationFilter { public void OnAuthorization(AuthorizationFilterContext context) { //自定义的验证逻辑代码 } }
和在PageModel中override不同,我们自定义的Filter实现类只能依靠
public void OnAuthorization(AuthorizationFilterContext context) { string userId = context.HttpContext.Request.Cookies[Keys.UserId]; if (string.IsNullOrEmpty(userId)) { context.Result = new RedirectResult("/Log/On"); } }
不同的FilterContext,比如,在PageHandlerExecutedContext
(context.HandlerInstance as PageModel).TempData
@想一想@:context里面的值又是哪里来的呢?
这样,所有的PageModel在运行时都会在相应时间点依次调用:
有时候我们不想Filter应用于全局。比如登录/注册页面就不需要已登录用户访问。
自定义的类继承自Attribute,然后标记于PageModel。同时
让NeedLogOn再继承Attribute,就可以把public class NeedLogOnAttribute : Attribute, IAuthorizationFilter
就可以把NeedLogOn当做Attribute放到PageModel上,比如:
[NeedLogOn] public class NewModel : PageModel
注意:只能是PageModel上,不能是PageHandler Method上
RazorPages还定义了一些FilterAttribute基类,包括:
通过override可以
多快好省!前端后端,线上线下,名师精讲
更多了解 加: