我正在尝试允许虚荣网址,但我遇到的问题是,如果我进入
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" }
);
答案 0 :(得分:1)
我觉得你快到了。请尝试setting a constraint获取ID:
new { ID = @"\d+" }
这将保证,如果您尝试访问XXXX / User / Profile / Test,您的操作将不会被命中,因为Test不是真正的id。