gpt4 book ai didi

c# - ASP.NET Core 2.1 中的脚手架身份 UI 并添加全局过滤器

转载 作者:行者123 更新时间:2023-11-30 21:31:05 25 4
gpt4 key购买 nike

我有一个 ASP.NET Core 2.1 应用程序,我在其中使用身份脚手架,如 here 中所述

现在我有一个用于 OnActionExecuting 的全局过滤器

public class SmartActionFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext filterContext)
{
...
}
}

在 startup.cs 中我配置了过滤器如下

public void ConfigureServices(IServiceCollection services)
{
services
.AddMvc(options =>
{
options.Filters.Add(new AddHeaderAttribute("Author", "HaBo")); // an instance
options.Filters.Add(typeof(SmartActionFilter)); // by type
// options.Filters.Add(new SampleGlobalActionFilter()); // an instance
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddJsonOptions(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});
}

此过滤器可用于所有操作方法,但不适用于身份区域中的操作方法。如何让全局过滤器适用于身份区域中的所有页面?

最佳答案

Filters in ASP.NET Core的开头段内,您会看到以下注释:

Important

This topic does not apply to Razor Pages. ASP.NET Core 2.1 and later supports IPageFilter and IAsyncPageFilter for Razor Pages. For more information, see Filter methods for Razor Pages.

这解释了为什么您的 SmartActionFilter 实现只执行操作而不执行页面处理程序。相反,您应该按照注释中的建议实现 IPageFilterIAsyncPageFilter:

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)。

如果您希望同时为 页面处理程序运行此操作,看起来您可能需要同时实现 IActionFilterIPageFilter

关于c# - ASP.NET Core 2.1 中的脚手架身份 UI 并添加全局过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53741865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com