对于使用ASP.NET Core的Razor页面,有任何方法可以为所有动词创建一个catch-all处理程序,而不是使用单独的OnGet(),OnPost()。处理程序将需要访问HttpContext和Request对象(在构造函数中未提供)
而不是
select least(col1, col2), greatest(col1, col2), sum(total)
from t
group by least(col1, col2), greatest(col1, col2);
如下所示
case
同样可行的只是在每个请求之前或之后(带上下文)执行的泛型
答案 0 :(得分:1)
同样可行的只是在每个请求之前或之后(带上下文)执行的泛型
考虑到上述情况,您可能想要使用过滤器。声明:
public class DefaultFilterAttribute : ResultFilterAttribute
{
public override void OnResultExecuted(ResultExecutedContext context)
{
Console.WriteLine("Here we go");
base.OnResultExecuted(context);
}
}
如果您只想在一个页面上看到此行为:
[DefaultFilter]
public class IndexModel : PageModel
{
}
如果您需要在所有网页(Startup.cs
)上应用此过滤器:
services.AddMvcOptions(options =>
{
options.Filters.Add(typeof(DefaultFilterAttribute));
});
答案 1 :(得分:0)
如果要为所有请求方法执行一组命令,可以使用PageModel的约束:
public class IndexModel : PageModel
{
public IndexModel()
{
// This will be executed first
}
public void OnGet()
{
}
}
新解决方案
我还有其他解决方案。创建一个将继承自PageModel的类,您将在其中捕获所有不同的请求方法并调用新的虚方法。
public class MyPageModel : PageModel
{
public virtual void OnAll()
{
}
public void OnGet()
{
OnAll();
}
public void OnPost()
{
OnAll();
}
}
现在更改您的PageModel类,以便它将从您创建的新类继承。在您的课程中,您可以将OnAll方法定义为执行公共代码。
public class TestModel : MyPageModel
{
public override void OnAll()
{
// Write your code here
}
}