我是新来的剃刀页和我有处理方法的问题。再说了,我叫一个自定义处理程序页面,但忘了实现这个特殊的处理程序,默认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是否有这样做的方法吗?
您可以使用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());
})