2012-05-15 152 views
2

超載我有2種方法,下面方法控制器

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

給出不過MVC3在IIS 5.1給出運行時錯誤,這2個mehods是ambiguious。

我該如何解決這個問題?

+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)