0

同じアクション名を使用して呼び出される 2 つのアクション メソッドがありますが、実際のパラメーターの型に応じて、どちらのメソッドを呼び出すかが異なります。これはあいまいさを引き起こします。パラメータが Guid であり、適切なメソッドであるかどうかを判断する属性を作成しました。

[RequiredGuidParameter(ParameterName = "title")]
[ActionName("Title")]
public ActionResult Item_ById(Guid id)
{ ... }

[ActionName("Title")]
public ActionResult Item_ByName(string id)
{ ... }

属性は次のようになります。

    public string ParameterName = string.Empty;

    public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo)
    {
        object parameter = null;
        try
        {
            parameter = controllerContext.RouteData.GetRequiredString(ParameterName) as object;
            if (parameter != null)
            {
                Guid guid;
                return Guid.TryParse((string)parameter, out guid);
            }
        }
        catch { }

        parameter = controllerContext.RequestContext.HttpContext.Request[ParameterName] as object;
        if (parameter != null)
        {
                Guid guid;
                return Guid.TryParse((string)parameter, out guid);
        }

        return false;
    }

最終的な目標は、パラメーターが Guid の場合はこのメソッドを実行し、それ以外の場合は先に進み、次のメソッドを見つけることです。追加のルートの作成を伴わないより良い方法はありますか? それとも、もっと良い方法ですか?

4

1 に答える 1

0

次のようなものではないのはなぜですか:

public ActionResult Item_Search(string id, Guid guid)
{
    if( string.IsNullOrWhiteSpace(id) 
         SearchById();
     if( guid != new Guid() )
         SearchByGuid()
}

保証対象外の疑似コード /\

于 2010-12-03T16:53:38.717 に答える