Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IAsyncationFilter返回空白页_C#_Asp.net Core_Action Filter - Fatal编程技术网

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
}