gpt4 book ai didi

c# - IAsyncActionFilter 返回空白页

转载 作者:行者123 更新时间:2023-12-05 02:46:31 24 4
gpt4 key购买 nike

如果应用程序在 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 中读取 Controller 和操作。如果操作不是“维护”,我会询问 API 应用程序是否处于维护状态。如果是,则返回“维护”操作。

然后,在 Startup.cs 中,我将 actionfilter 设为全局:

services.AddMvc(options =>
{
options.Filters.Add(new MaintenanceFilter());
});

actionfilter 按预期工作,如果 api 返回 true,它会重定向到 Maintenance 操作,否则它会重定向到最初请求的页面。

但是返回的 html 代码始终为空白,无论应用程序是否处于维护状态。

即使我像这样将 ActionFilter 留空:

public class MaintenanceFilter : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{

}
}

为什么我的过滤器返回空白页?

最佳答案

您应该在OnActionExecutionAsync 结束时调用await 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
}

关于c# - IAsyncActionFilter 返回空白页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65469244/

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