ActionMethodSelectorAttribute在方法之间丢失

时间:2011-08-23 08:51:02

标签: asp.net-mvc asp.net-mvc-3 razor attributes

我有两个使用自定义的IsWWWAttribute属性继承自ActionMethodSelectorAttribute的操作,我在尝试调用post方法时收到以下错误:

System.Reflection.AmbiguousMatchException 控制器类型'AccountsController'上当前的操作'forgotpassword'请求在以下操作方法之间是不明确的:System.Web.Mvc.ActionResult ForgotPassword()类型.Controllers.AccountsController System.Web.Mvc.ActionResult ForgotPassword(.Models。 ForgotPasswordModel)类型.Controllers.AccountsController

    [IsWWW]
    public ActionResult ForgotPassword()
    {
        // SOME CODE
    }
    [HttpPost]
    [IsWWW]
    public ActionResult ForgotPassword(ForgotPasswordModel model)
    {
        // SOME CODE
    }

自定义属性:

    public class IsWWWAttribute : ActionMethodSelectorAttribute
{
    public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo)
    {
        return Configuration.Subdomain.SubDomainID == 0;
    }
}

如果我删除了[IsWWW],那么调用post动作就可以了!

我在这里缺少什么!

2 个答案:

答案 0 :(得分:0)

也许首先检查一下ActionMethodSelectorAttribute base.IsValidForRequest()方法的结果?然后运行你的逻辑......

答案 1 :(得分:0)

ActionMethodSelectorBase.RunSelectionFilters将返回匹配的所有操作,并且这两个方法在post上都有效。在top方法上添加[HttpGet]以使其在PostBack上无效