2

以下に示すように、2つのメソッドがあります

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

しかし、IIS 5.1 を使用する MVC3 では、この 2 つのメソッドがあいまいであるという実行時エラーが発生します。

どうすればこの問題を解決できますか?

4

2 に答える 2

3

文字列は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)
于 2012-05-15T13:03:37.110 に答える
0

私の考えでは、ASP.NET Routingを使用してみてください。新しい MapRoute を追加するだけです。この投稿で例を確認できます

于 2012-05-15T13:42:00.843 に答える