Controller中的方法重载

时间:2012-05-15 13:00:12

标签: asp.net-mvc overloading

我有2个方法,如下所示

public string Download(string a,string b) 
public string Download(string a)

但MVC3使用IIS 5.1会产生运行时错误,这2个方法都不明确。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

由于字符串可以为空,因此从MVC的角度来看,这些重载确实是不明确的。只需检查b是否为空(如果您想要默认值,可以将其设为可选参数)。

另一方面,您可以尝试自定义ActionMethodSelectorAttribute实施。这是一个例子:

public class ParametersRequiredAttribute : ActionMethodSelectorAttribute
    {
        #region Overrides of ActionMethodSelectorAttribute

        /// <summary>
        /// Determines whether the action method selection is valid for the specified controller context.
        /// </summary>
        /// <returns>
        /// true if the action method selection is valid for the specified controller context; otherwise, false.
        /// </returns>
        /// <param name="controllerContext">The controller context.</param><param name="methodInfo">Information about the action method.</param>
        public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
        {
            var parameters = methodInfo.GetParameters();

            foreach (var parameter in parameters)
            {
                var value = controllerContext.Controller.ValueProvider.GetValue(parameter.Name);

                if (value == null || string.IsNullOrEmpty(value.AttemptedValue)) return false;
            }

            return true;
        }

        #endregion
    }

用法:

[ParametersRequired]
public string Download(string a,string b)


// if a & b are missing or don't have values, this overload will be invoked. 
public string Download(string a)

答案 1 :(得分:0)

在我看来,你应该尝试使用ASP.NET Routing。只需添加新的MapRoute即可。您可以查看此post

中的示例