【发布时间】:2010-12-03 16:49:36
【问题描述】:
我有两个使用相同动作名称调用的动作方法,但是,取决于实际参数类型,取决于应该调用哪个方法。这会导致歧义。我创建了一个属性来确定参数是否是 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,则运行此方法,否则继续,在这种情况下,它会找到下一个。有没有更好的方法不涉及创建额外的路线?或者也许是更好的方法?
【问题讨论】:
标签: asp.net-mvc model-view-controller custom-attributes attr