我正在构建一个 NopCommerce 插件,并希望在与其他方法共享 ActionName 的 ActionMethod 上使用 FilterProvider 注册自定义 ActionFilter。
这是两个具有相同 ActionName 的 ActionMethods
[HttpPost, ActionName("Edit")]
[FormValueRequired("cancelorder")]
public ActionResult CancelOrder(int id)
{...}
[HttpPost, ActionName("Edit")]
[FormValueRequired("captureorder")]
public ActionResult CaptureOrder(int id)
{...}
在我的过滤器提供程序中,我需要以某种方式将 CancelOrder 方法与 CaptureOrder 分开:
public class OrderFilterProvider : IFilterProvider
{
private readonly IActionFilter _actionFilter;
public OrderFilterProvider(IActionFilter actionFilter)
{
_actionFilter = actionFilter;
}
public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
{
if (actionDescriptor.ControllerDescriptor.ControllerType == typeof(OrderController) &&
actionDescriptor.ActionName.Equals("Edit"))
{
return new Filter[]
{
new Filter(_actionFilter, FilterScope.Action, null)
};
}
return new Filter[] { };
}
}
使用此代码,过滤器在 CancelOrder 和 CaptureOrder 上都注册了,如何仅在 CancelOrder 方法上注册它?
我的想法是根据方法名称或 FormValueRequired 属性中的参数值将它们分开,但没有运气找到这样做的方法。
FormValueRequired 没有任何公共属性,如下所示:
public class FormValueRequiredAttribute : ActionMethodSelectorAttribute {
private readonly string[] _submitButtonNames;
private readonly FormValueRequirement _requirement;
public FormValueRequiredAttribute(params string[] submitButtonNames):
this(FormValueRequirement.Equal, submitButtonNames)
{
}
public FormValueRequiredAttribute(FormValueRequirement requirement, params string[] submitButtonNames)
{
//at least one submit button should be found
this._submitButtonNames = submitButtonNames;
this._requirement = requirement;
}
}
这是我的调试器中的样子:http ://www.tiikoni.com/tis/view/?id=4843369
有没有办法获取方法的名称?