如何获取不含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
相关产品推荐
相关产品推荐

