Для этого вы можете использовать глобальный фильтр .
Как говорит Крис Пратт в своем комментарии, каркас вернется к выполнению обработчика 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());
})