【发布时间】:2020-12-27 18:43:36
【问题描述】:
如果应用程序在appsettings.json 中设置了 OnMaintenance,我正在尝试实现 IAsyncActionFilter 以重定向到Maintenance 页面。
我首先实现了 ActionFilter 如下:
public class MaintenanceFilter : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
string controller = (string)context.RouteData.Values["Controller"];
string action = (string)context.RouteData.Values["action"];
if (controller != "States" && action != "Maintenance")
{
var cs = context.HttpContext.RequestServices.GetService<IClientService>();
if (await cs.GetMaintenanceState())
{
context.Result = new RedirectToActionResult("Maintenance", "States", null);
}
}
}
}
基本上,它只是从请求的 RouteData 中读取控制器和操作。如果操作不是“维护”,我会询问 API 应用程序是否处于维护状态。如果是,则返回到“维护”操作。
然后,在Startup.cs 中,我将 actionfilter 设为全局:
services.AddMvc(options =>
{
options.Filters.Add(new MaintenanceFilter());
});
actionfilter 按预期工作,如果 api 返回 true,它会重定向到维护操作,否则它会重定向到最初请求的页面。
但无论应用程序是否处于维护状态,返回的 html 代码始终为空白。
即使我像这样将 ActionFilter 留空:
public class MaintenanceFilter : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
}
}
为什么我的过滤器返回一个空白页?
【问题讨论】:
标签: c# asp.net-core action-filter