我希望获得razor页面处理程序"原始"方法名,用于在我的应用程序中使用context.HandlerMethod.Name = rawMethodName
验证IAsyncPageFilter实现的OnPageHandlerExecutionAsync中的调用处理程序方法.
客观上,我需要它来支持在strongly typed manner中工作,并确保始终引用正确的处理程序方法.
The Razor Page Framework use a naming convention以 Select 要执行的适当处理程序方法.默认约定的工作方式是将用于请求的HTTP方法与方法名匹配,方法名以"on"为前缀,例如OnGet()
、OnPost()
、OnPut()
等.处理程序方法也有可选的异步等效项,例如OnPostAsync()
、OnGetAsync()
等.
我try 了以下方法来替换使用Regex的匹配约定.
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
用例
然后,我在my 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
属性的名称?请为此方法提供任何建议或适当的解决方法.