1 回答
TA贡献1111条经验 获得超0个赞
在ASP.NET Core中的过滤器的开头段落中,您将看到以下注释:
重要的
本主题不适用于 Razor 页面。ASP.NET Core 2.1 及更高版本支持Razor 页面的IPageFilter和IAsyncPageFilter。有关详细信息,请参阅Razor 页面的筛选方法。
这解释了为什么您的SmartActionFilter实现仅针对操作而不是针对页面处理程序执行。相反,您应该实施IPageFilter或IAsyncPageFilter按照注释中的建议:
public class SmartActionFilter : IPageFilter
{
public void OnPageHandlerSelected(PageHandlerSelectedContext ctx) { }
public void OnPageHandlerExecuting(PageHandlerExecutingContext ctx)
{
// Your logic here.
}
public void OnPageHandlerExecuted(PageHandlerExecutedContext ctx)
{
// Example requested in comments on answer.
if (ctx.Result is PageResult pageResult)
{
pageResult.ViewData["Property"] = "Value";
}
// Another example requested in comments.
// This can also be done in OnPageHandlerExecuting to short-circuit the response.
ctx.Result = new RedirectResult("/url/to/redirect/to");
}
}
注册SmartActionFilter仍然以与您的问题中所示相同的方式完成(使用MvcOptions.Filters)。
如果您想为操作和页面处理程序运行它,看起来您可能需要同时实现IActionFilterand IPageFilter。
- 1 回答
- 0 关注
- 146 浏览
添加回答
举报