You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取不含On前缀与可选Async后缀的Razor Page处理器方法名?

问题:获取Razor Page处理器的“原始”方法名并强类型验证

需求背景

我需要获取Razor Page处理器的“原始”方法名,在IAsyncPageFilter的OnPageHandlerExecutionAsync方法中,通过context.HandlerMethod.Name == rawMethodName验证当前调用的处理器方法。要求强类型实现,确保始终引用正确的处理器方法。

Razor Page框架通过命名约定选择执行的处理器方法:默认以On为前缀,后跟HTTP方法(如OnGet、OnPost、OnPut),异步方法则追加Async后缀(如OnPostAsync、OnGetAsync)。

我的尝试

我用正则表达式替换命名约定的方式实现了一个提取方法:

public string GetRawHandlerMethodName(string handlerMethod)
{
    List<string> namingConventions = new List<string>() { "OnGet", "OnPost", "OnPut", "Async" };
    string handlerMethodName = handlerMethod;
    foreach (string namingConvention in namingConventions)
    {
        string[] result = Regex.Split(handlerMethodName, namingConvention, RegexOptions.IgnoreCase);
        handlerMethodName = string.Join("", result);
    }
    return handlerMethodName;
}

强类型调用示例:

string rawMethodName = GetRawHandlerMethodName(nameof(OnPostMyMethodAsync));
// 输出: MyMethod

使用场景

将提取出的原始方法名用于过滤器中的验证逻辑:

public async override Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next)
{
    string rawMethodName = GetRawHandlerMethodName(nameof(OnPostMyMethodAsync));
    if (!string.IsNullOrEmpty(context.HandlerMethod.Name) && context.HandlerMethod.Name == rawMethodName)
    {
        // 当前调用的是MyMethod,执行对应逻辑...
    }
}

核心疑问

有没有更常规的方式获取处理器方法名来完成这个检查?比如ASP.NET Core内部是如何获取并设置context.HandlerMethod.Name属性的?希望得到相关建议或合适的替代方案。

内容的提问来源于stack exchange,提问作者Stephen Murumba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:33:09