有没有办法赶上一个HTTP请求Razor的页面在ASP.NET 2.1的核心不存在的自定义处理程序?

问题描述 投票:0回答:1

我是新来的剃刀页和我有处理方法的问题。再说了,我叫一个自定义处理程序页面,但忘了实现这个特殊的处理程序,默认POST或GET被用于处理程序。有没有办法来改变或明白了吗?

比方说,我的HTTP-GET请求一个页面使用make

/xyz?handler=dostuff

但没有带得到了处理OnGetDoStuff,使用onGET与执行的默认处理程序。

public class XyzModel : PageModel
{
    public void OnGet()
    {
    }
    // missing handler public void OnGetDoStuff(){...}
}

据我所知,处理程序是在GET请求中只是一个参数,这样我就可以检查请求的URL在每一个默认的方法,看是否有自定义处理程序被移交。不过,我想是这样的404是否有这样做的方法吗?

asp.net-core-2.1 razor-pages
1个回答
0
投票

您可以使用global filter这一点。

正如克里斯·普拉特在他的评论中说,该框架将回落到如果没有匹配的命名处理器存在,否则默认OnGet处理程序。您可以在实现OnPageHandlerSelectionAsync类的重载IAsyncPageFilter方法中检测到这一点。粗糙和准备,但大意如下的东西会做:

public class CustomPageFilter : IAsyncPageFilter
{
    public async Task OnPageHandlerSelectionAsync(PageHandlerSelectedContext context)
    {
        var handler = context.HttpContext.Request.Query["handler"];
        if (handler.Count > 0)
        {
            var handlerMethodName = handler.ToArray()[0].ToLower();
            var method = context.HandlerMethod.MethodInfo.Name.ToLower();
            if (!method.EndsWith(handlerMethodName))
            {
                context.HttpContext.Response.StatusCode = 404;
            }
        }
        await Task.CompletedTask;
    }

OnPageHandlerSelectionAsync方法已被选择的处理方法后运行。这里的简单的测试检查是否选定的方法名称与传递给handler查询字符串值的值结束。如果没有,该处理方法缺失。

当我连接到显示的文章,您可以配置在ConfigureServices方法全局过滤器:

services.AddMvc(options =>
{
    options.Filters.Add(new CustomPageFilter());
})
© www.soinside.com 2019 - 2024. All rights reserved.