C# IAsyncationFilter返回空白页
如果应用程序在C# IAsyncationFilter返回空白页,c#,asp.net-core,action-filter,C#,Asp.net Core,Action Filter,如果应用程序在appsettings.json中设置为维护,我试图实现IAsyncationFilter,以便重定向到维护页面 我首先实现了ActionFilter,如下所示: public class MaintenanceFilter : IAsyncActionFilter { public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
appsettings.json
中设置为维护,我试图实现IAsyncationFilter,以便重定向到维护
页面
我首先实现了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);
}
}
}
}
actionfilter按预期工作,如果api返回true,它将重定向到维护操作,否则将重定向到最初请求的页面
但是返回的html代码始终为空,无论应用程序是否处于维护状态
即使我将ActionFilter留空,如下所示:
public class MaintenanceFilter : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
}
}
为什么我的筛选器返回空白页?您应该在
OnActionExecutionAsync
的末尾调用Wait next()
,否则不会执行实际操作:
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);
}
}
}
await next(); // this executes the actual action
}
公共类维护过滤器:IAsyncationFilter
{
公共异步任务OnActionExecutionAsync(ActionExecutionContext上下文,ActionExecutionDelegate下一步)
{
字符串控制器=(字符串)context.RouteData.Values[“controller”];
string action=(string)context.RouteData.Values[“action”];
if(控制器!=“状态”&&action!=“维护”)
{
var cs=context.HttpContext.RequestServices.GetService();
如果(等待cs.GetMaintenanceState())
{
context.Result=新的RedirectToActionResult(“维护”,“状态”,null);
}
}
}
wait next();//这将执行实际操作
}
谢谢,它很管用!
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);
}
}
}
await next(); // this executes the actual action
}