超載我有2種方法,下面方法控制器
public string Download(string a,string b)
public string Download(string a)
給出不過MVC3在IIS 5.1給出運行時錯誤,這2個mehods是ambiguious。
我該如何解決這個問題?
超載我有2種方法,下面方法控制器
public string Download(string a,string b)
public string Download(string a)
給出不過MVC3在IIS 5.1給出運行時錯誤,這2個mehods是ambiguious。
我該如何解決這個問題?
由於字符串可以爲空,因此從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)
在我看來,你應該嘗試使用ASP.NET Routing。只需添加新的MapRoute。你可以查看這個例子post
你真的*需要*兩種方法嗎?請給更多的上下文。 –