我有2个方法,如下所示
public string Download(string a,string b)
public string Download(string a)
但MVC3使用IIS 5.1会产生运行时错误,这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
中的示例