很好地利用Attribute来确定正确的调用方法

时间:2010-12-03 16:49:37

标签: asp.net-mvc model-view-controller custom-attributes attr

我有两个使用相同操作名称调用的操作方法,但是,根据实际参数类型,应该调用哪个方法。这导致歧义。我创建了一个属性,用于确定参数是否为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运行此方法,否则继续前进,在这种情况下它会找到下一个。是否有更好的方式不会创建额外的路线?或者也许是更好的方式?

1 个答案:

答案 0 :(得分:0)

为什么不能这样:

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

非保修伪代码/ \