我希望获取 razor 页面处理程序“RAW”方法名称,用于验证我的应用程序中 IAsyncPageFilter 实现的 OnPageHandlerExecutionAsync 中的调用处理程序方法,
context.HandlerMethod.Name = rawMethodName
。
我客观地要求它支持以强类型方式工作,并确保始终引用正确的处理程序方法。
Razor 页面框架使用命名约定来选择要执行的适当处理程序方法。默认约定的工作原理是将用于请求的 HTTP 方法与方法名称相匹配,方法名称以“On”为前缀,例如
OnGet()
、OnPost()
、OnPut()
等。处理程序方法也有可选的异步等效项,例如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));
// Output: MyMethod
然后我在我的
IAsyncPageFilter
中使用输出进行验证,如下所示:
public async override Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next)
{
string rawMethodName = GetRawHandlerMethodName(nameof(OnPostMyMethodAsync));
if (!string.IsNullOrEmpty(context.HandlerMethod.Name) && context.HandlerMethod.Name == rawMethodName)
{
// Calling method is MyMethod. Do work...
}
}
是否有检索处理程序方法名称来执行此检查的常规方法?例如,ASP.NET Core 如何获取和设置类似于我们验证的
context.HandlerMethod.Name
属性的名称?请对此方法提供任何建议或合适的解决方法。
我认为你不需要自己映射处理程序,只需比较方法名称,如下所示:
public async override Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context,
PageHandlerExecutionDelegate next)
{
var targetMethod = nameof(OnGet);
if (context.HandlerMethod?.MethodInfo.Name == targetMethod)
{
//do work here
}
await next.Invoke();
}