以下に示すように、2つのメソッドがあります
public string Download(string a,string b)
public string Download(string a)
しかし、IIS 5.1 を使用する MVC3 では、この 2 つのメソッドがあいまいであるという実行時エラーが発生します。
どうすればこの問題を解決できますか?
以下に示すように、2つのメソッドがあります
public string Download(string a,string b)
public string Download(string a)
しかし、IIS 5.1 を使用する MVC3 では、この 2 つのメソッドがあいまいであるという実行時エラーが発生します。
どうすればこの問題を解決できますか?
文字列はnull許容であるため、これらのオーバーロードはMVCの観点からは本当にあいまいです。nullかどうかを確認するだけ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 を追加するだけです。この投稿で例を確認できます