我正在尝试允许 Vanity Urls,但我遇到了一个问题,如果我输入
XXXX/User/Profile/Test
代替
xxxx/User/Profile/224
它无法读取字符串。
我当前的 ActionResult 如下:
public ActionResult Profile(int ID = -1, string VanityID = null)
{
if (VanityID == null)
{
ppUser viewerChoice = DB.ppUser_GetUserByPersonID(ID);
return View(viewerChoice);
}
else
{
ppUser viewerChoice = DB.ppUser_GetUserByVanityID(VanityID);
return View(viewerChoice);
}
}
如果在 URL 中输入一个 int,它将采用 int Id,但如果输入一个字符串,则不会输入任何内容并抛出错误,因为 ID 被读取为 -1。
我也一直在尝试使用 2 个操作结果,如下所示:
public ActionResult Profile(int ID)
{
ppUser viewerChoice = DB.ppUser_GetUserByPersonID(ID);
return View(viewerChoice);
}
public ActionResult Profile(string ID)
{
ppUser viewerChoice = DB.ppUser_GetUserByVanityID(ID);
return View(viewerChoice);
}
但是当我尝试调用任一 ActionResult 时,它会向我抛出 AmbiguousMatchException 错误。
这就是 routes.Maproute 如果它也有帮助的话。
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new { controller = @"[^\.]*" }, // Parameter constraints
new string[] { typeof(MvcApplication).Namespace + ".Controllers" }
);